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. Hadoop IPC的代码结构分析

    与IPC相关的代码在org.apache.hadoop.ipc包下.共七个文件,其中4个辅助类: RemoteException Status VersionedProtocol Connection ...

  2. CentOS 6.6 安装Cacti

    1.最小化安装CentOS6.6,装好系统以后关闭防火墙和selinux[root@Cacti ~]#chkconfig iptables off[root@Cacti ~]#vi /etc/sysc ...

  3. ACM 字母统计

    字母统计 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,如果出现次数最多字母有多个那么输出最小 ...

  4. Codeforces Beta Round #5

    A题,无聊的题目. #include <cstdio> #include <string> #include <cstring> #include <cmat ...

  5. URAL 1287. Mars Canals

    题目链接 这题挺水,看懂了,就OK.卡了几下内存,还是卡过了. #include <iostream> #include <cstdio> #include <cstri ...

  6. java画图程序_图片用字母画出来

    最近在研究怎样将图片用字母在文本编辑工具中“画”出来. 你看了这个可能还不知道我想说什么? 我想直接上图,大家一定就知道了 第一张:小猫 原图:http://www.cnblogs.com/hongt ...

  7. C#_简单实用的翻页

    简单实用的生成翻页HTML辅助类 C# using System.Text; namespace ClassLibrary { /// <summary> /// /// </sum ...

  8. 在XP下安装PHP

    最近,有许多朋友问我在WindowsXp下PHP的安装过程,正好最近我在自己的机器上成功的以模块化的方式安装了PHP4.23.既然这么多朋友需要,我就以最常见的IIS和Apache服务器为例,把PHP ...

  9. Docker1.12 新增swarm集群

    在Docker1.12新版本中,一个新增加的功能点是swarm集群,通过docker命令可以直接实现docker-engine相互发现,并组建成为一个容器集群.有关集群的docker命令如下: (1) ...

  10. Apple Special Event, October 2013 (1080p)(苹果发布会)

    Apple iPhone 5C(16G) 3G智能手机(粉色 北京联通惊喜合约价3899,购机送费含200话费,率先上市,限量抢购)