const 关键字

  1. 对于常量来说,系统没有划定专门的区域来保护其中的数据不能被更改。也就是说,使用常量的方式对数据进行保护是通过编译器作语法限制来实现的。我们仍然可以绕过编译器的限制去修改被定义为“常量”的内存区域
const int c = 10;
int* p = (int*)&c;

// 地址 &c == p
// 也就是说 p 和 c 对应的是同一块内存区域
// 但是通过 c 访问这个内存区域的时候,值一直都是 10(这应该是编译器的工作)

*p = 15;
cout << c << endl; // 10
  1. 引用本来就不能修改值,所以也就没有 const 之说
int i = 10;
int & const c = i; // error
const int & cc = i;; // ok 
  1. 当存在同名同参数和返回值的常量函数和非常量函数时,具体调用哪个函数是根据调用对象是常量对像还是非常量对象来决定的。常量对象调用常量成员;非常量对象调用非常量的成员。
    因为成员函数中有一个隐含参数 this,所以实质上对应 const TYPE*TYPE* 两种参数类型

  2. const数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其const数据成员的值可以不同。所以不能在类声明中初始化const数据成员,因为类的对象未被创建时,编译器不知道const 数据成员的值是什么。
    const数据成员的初始化只能在类的构造函数的初始化表中进行。要想建立在整个类中都恒定的常量,应该用类中的枚举常量来实现。枚举常量不会占用对象的存储空间,他们在编译时被全部求值。

参考链接 http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,154评论 1 51
  • C语言中#define 宏定义的命令 只是在预处理阶段对用#define 所定义的内容进行替换,不会检查数据类型 ...
    天净沙阅读 5,802评论 0 8
  • const关键字它允许你指定一个语义的约束,也就是不允许被改动的对象,而编译器会帮助你实施这样的约束,这有有助于在...
    HuCoco阅读 4,068评论 0 6
  • C++文件 例:从文件income. in中读入收入直到文件结束,并将收入和税金输出到文件tax. out。 检查...
    SeanC52111阅读 8,044评论 0 3
  • 如果给你一个机会,让你穿越到十年后,待上一天再回来,你会做哪些事情? 我想,记住几期福彩中奖号码是大多数人要做的第...
    宵汀阅读 1,661评论 0 3

友情链接更多精彩内容