1、 默认状态下,const对象仅在文件内有效,即在不同文件中出现同名const变量的时候,其实相当于这些同名const是不同的东西。

  如果想要在文件中共享const变量,可以在const变量不管是声明还是定义都添加extern关键词,这样就只需要定义一次。

2、 const的引用,不能通过引用改变被引用对象(被引用的对象不一定是常量,可以被通过其他方式修改)

  引用的类型必须与被引用对象类型一致,但在对const的引用中有两种例外:

  • 初始化常量引用时可以用非常量、字面值甚至表达式等任意表达式作初始值  
int var = ;
const int &r1 = var * ;
  • 为常量引用绑定一个临时量,即常量引用被绑定到不同类型的对象上时会被绑定到一个由不同类型到常量引用类型转换后的临时量上。(前提是这两种类型可以隐式转换)

  对比一下,很容易理解,上述两种情况如果不是const引用,都是非法的

3、 指针和const

  • 指向常量的指针【pointer to const】,不能用于改变所指向对象的值,但是指向的对象并不一定是常量,可以通过其他途径改变,(存放常量对象地址,只能用这个)
Double dvar = 3.14;
Const double *cptr = &dvar; //常量指针指向非常量可以,但是不能改变其值
  • 常量指针【const pointer】,因为指针是对象,定义常量指针必须初始化,而且初始化完成就再也不能改变,*放在const之前,表明是常量指针。此时,不变的是指针的值,而非指针指向的那个值,可以通过指针修改对象的值,但是这个指针这辈子只能指向这一个对象啦
int num = ;
int *const ptr = #
  • 指向常量的常量指针,就是指针一辈子只能指向一个永不改变的对象。
Const int num = ;
Const int *const ptr = #

  总结:指向常量的指针,类似于常量引用,指针可以改变自己指向谁,但是不能改变自己指向对象的值;常量指针一辈子只能指向一个对象,可以改变对象的值;指向常量的常量指针,就是二者的结合啦

4、 顶层const与底层const

  顶层const表示指针本身是一个常量,其值不允许改变

  底层const表示指针指向的内容是一个常量,指针本身可以被改变

【C++】const的更多相关文章

  1. 【03】const

    [03]const 魔芋总结: 1,声明的是常量,一经声明,不得修改.必须声明的同时并赋值.否则报错. 2,只在声明所在的块级作用域内有效. 3,const命令声明的常量也是不提升,同样存在暂时性死区 ...

  2. 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)

    [转]作者:xwdreamer   出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...

  3. 【转】const和static readonly

    我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等.在多数情况下可以混用.二者本质的区别在于,const的值是在编译期间确定的,因此只能在声 ...

  4. 【转】const 是左结合的,若左边为空,则再向右结合

    const 是左结合的,若左边为空,则再向右结合 一.指向  const  对象的指针指向  const  对象的指针,指的是指针指向的对象的内容是const的,不可修改,但指针本身(即指针的值)是可 ...

  5. 【转】const的用法,特别是用在函数前面与后面的区别!

    在普通的非 const成员函数中,this的类型是一个指向类类型的 const指针.可以改变this所指向的值,但不能改变 this所保存的地址. 在 const成员函数中,this的类型是一个指向 ...

  6. 【C】——const和volatile可以并用吗?

    答案是肯定的,可以一起用. 因为很多人误解了const的真正含义,很多初学者认为const修饰的就是常量,而常量不会改变,而既然不会改变,那volatile就没有意义. 但是实际上这正是对const的 ...

  7. 【C++】const成员函数

    形式: 在成员函数后面加上const限定词,表示不会修改对象内容. 例如Circle类: class Circle { double r; public: Circle(double newr) { ...

  8. 【C++】const、volatile不能修饰没有this指针的成员函数

    一般所有的成员函数都只有一个复本,当不同的对象调用成员函数时,为了区分是哪个成员在调用,会传入this指针. 当调用有const.volatile修饰的成员函数时,会相应的传入一个const.vola ...

  9. 【C++】const 常引用的用法

    用法: const int & a; 定义了一个整型常引用变量a. 特点: 1.不能够通过常引用变量来修改其值,如: const int & a = 10; a = 12;//编译报错 ...

随机推荐

  1. sql跨电脑导数据

    启用Ad Hoc Distributed Queries: reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigu ...

  2. HDU 3333 & 离线+线段树

    题意: 统计一段区间内不同数字之和.如1 1 2 3 1 统计2---5即1+2+3. SOL: 很少打过离线的题目...这种可离线可在线的题不管怎么样一般都是强行在线... 考虑这题,此前做过一个类 ...

  3. Android 在线更新apk

    1.获取当前包的信息: 1 PackageManager manager = Main.this.getPackageManager(); 2 try { 3 PackageInfo info = m ...

  4. iOS 开发小结

    一,经历 1> 在编写以前有过的类似的新功能时,如果以前的开发人员没有写明明确的注释和开发需求,一定要仔细阅读所有代码,每一句代码都有它存在的意义. 2> 例如,只以为是[self.ful ...

  5. ld: warning: directory not found for option 去掉警告的方法

    工程老是提示ld: warning: directory not found for option:xxxxxx 这种提示,通常是由于添加了第三方SDK,但是后来改了个名字或者去掉了SDK,但是在 B ...

  6. IOS 网络请求方式

    iOS开发中的网络请求   今天来说说关于iOS开发过程中的网络请求. 关于网络请求的重要性我想不用多说了吧.对于移动客户端来说,网络的重要性不言而喻.常见的网络请求有同步GET, 同步POST, 异 ...

  7. Mockito学习资料

    官网:http://mockito.org/ https://dzone.com/refcardz/mockito

  8. 前端自动化工具 -- grunt 使用简介

    grunt作为一个前端构建工具,有资源压缩,代码检查,文件合并等功能. 下面就简单了解grunt的使用. 一.环境配置 grunt是基于nodejs的,所以需要一个 nodejs 环境,未了解的可以  ...

  9. js如何使得新打开的窗口居中

    <a href="#" class="blue" onclick="window.open('/Content/service.html', ' ...

  10. POI-HSSF and POI-XSSF - Java API To Access Microsoft Excel Format Files

    一.概述 HSSF和XSSF是apache开源项目POI中实现java面向Excel的两个接口.两者的区别在于,HSSF适用于Excel '97(-2007)文档,而XSSF适用于Excel 2007 ...