当前位置: 首页 > news >正文

C++中的const限定修饰符

const修饰符可以把对象转变成常数对象,什么意思呢?
   意思就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用!
  使用方法是:
const int a=1;//这里定义了一个int类型的const常数变量a;
  但就于指针来说const仍然是起作用的,以下有两点要十分注意,因为下面的两个问题很容易混淆!
  我们来看一个如下的例子:
#include <iostream>  
using namespace std;  

void main(void)  
{  
const int a=10;  
int b=20;  
const int *pi;  
pi=&a;  
cout <<*pi << "|" << a <<endl;  
pi=&b;  
cout <<*pi << "|" <<b <<endl;  
cin.get();  
}
  上面的代码中最重要的一句是 const int *pi
  这句从右向左读作:pi是一个指向int类型的,被定义成const的对象的指针;
  这样的一种声明方式的作用是可以修改pi这个指针所指向的内存地址却不能修改指向对象的值;
  如果你在代码后加上*pi=10;这样的赋值操作是不被允许编译的!
  好,看了上面的两个例子你对const有了一个基本的认识了,那么我们接下来看一个很容易混淆的用法!
  请看如下的代码
#include <iostream>  
using namespace std;  
void main(void)  
{  
int a=10;  
const int *const pi=&a;  
cout <<*pi << "|" <<a <<endl;  
cin.get();  
}
  上面的代码中最重要的一句是 const int *const pi
  这句从右向左读作:pi是一个指向int类型对象的const指针;
  这样的一种声明方式的作用是你既不可以修改pi所指向对象的内存地址也不能利用指针的解引用方式修改对象的值,也就是用*pi=10这样的方式;
  所以你如果在最后加上*pi=20,想试图通过这样的方式修改对象a的值是不被允许编译的!
  结合上面的两点所说,把代码修改成如下形式后就可以必然在程序的任意的地方修改对象a的值或者是指针pi的地址了,下面的这种写法常被用语涵数的形式参数,这样可以保证对象不会在涵数内被改变值!
#include <iostream>  
using namespace std;  
void main(void)  
{  
const int a=10;//这句和上面不同,请注意!  
const int *const pi=&a;  
cout <<*pi << "|" <<a <<endl;  
cin.get();  
}

转载于:https://www.cnblogs.com/xmxu/archive/2012/08/20/2647379.html

相关文章:

  • 查看SqlServer表 索引 创建时间,修改时间。或者修改记录(转)
  • 在HTML中添加百度地图(有图)
  • 设计模式(4)之建造者模式
  • 保护模式下中断或异常示意图
  • java override overload
  • 多路访问网络中的挑战
  • 模拟系统提示框
  • DSL概念、类别、为什么要写DSL 1
  • Javascript 日期格式化
  • 成绩单课程翻译参考总表
  • NYOJ 86
  • C#处理oracle数据库的Clob类型
  • I have a dream
  • [笔记]8组LVDS_TX和LVDS_RX的调试心得
  • Struts2数据传输的背后机制:ValueStack(值栈)
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【Leetcode】104. 二叉树的最大深度
  • 0基础学习移动端适配
  • 2017前端实习生面试总结
  • js对象的深浅拷贝
  • Js基础知识(一) - 变量
  • Otto开发初探——微服务依赖管理新利器
  • Redis 中的布隆过滤器
  • redis学习笔记(三):列表、集合、有序集合
  • spring + angular 实现导出excel
  • storm drpc实例
  • Unix命令
  • vue-loader 源码解析系列之 selector
  • 从伪并行的 Python 多线程说起
  • 分布式事物理论与实践
  • 试着探索高并发下的系统架构面貌
  • 中文输入法与React文本输入框的问题与解决方案
  • 湖北分布式智能数据采集方法有哪些?
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​虚拟化系列介绍(十)
  • # 安徽锐锋科技IDMS系统简介
  • #pragma 指令
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (20050108)又读《平凡的世界》
  • (C语言)fgets与fputs函数详解
  • (JS基础)String 类型
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (差分)胡桃爱原石
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原)本想说脏话,奈何已放下
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net CHARTING图表控件下载地址
  • .NET 服务 ServiceController
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)