一、只有用字面量初始化的const常量才会进入常量符号表:
1、对const常量取引用,会导致编译器为其分配内存空间;
2、虽然编译器为其分配了内存空间,但是这个空间中的值不会被使用,还是会去使用常量符号表中的值;
3、使用其他变量初始化的const常量仍然是只读变量,不会进入常量符号表;
代码如下:

int main(void) {const int x = 0;//字面量初始化的const常量才会进入常量符号表int& rx = const_cast<int&>(x);//对const常量取引用,会导致编译器为其分配内存空间rx = 6;int y = 1;const int z = y;//使用其他变量初始化的const常量仍然是只读变量int* p = (int*)&z;*p = 9;printf("x = %d\n", x);//虽然编译器为其分配了内存空间,但是这个空间中的值不会被使用,还是会去使用常量符号表中的值printf("rx = %d\n", rx);printf("&x = %p\n", &x);printf("&rx = %p\n", &rx);printf("z = %d\n", z);cout << endl;printf("Press Enter Key to Continue... ...");getchar();return 0;
}

执行结果如下图:

二、被volatile修饰的const常量不会进入常量符号表,而是退化为只读变量,每次访问都从内存中取值:
代码如下:

int main(void) {volatile const int y = 2;//使用volatile,导致y未进入常量符号表 ,而是进入内存空间;int* p = const_cast<int*>(&y);*p = 9;printf("y = %d\n", y);printf("*p = %d\n", *p);printf("&y = %p\n", &y);printf("p = %p\n", p);printf("Press Enter Key to Continue... ...");getchar();return 0;
}

代码执行结果如下:

三、const引用的类型与初始化变量的类型:
相同:使初始化变量成为只读变量;
不同:生成一个新的只读变量,其初始值与初始化变量相同;
代码如下:

int main(void) {char c = 'c';char& rc = c;const int& trc = c;//const引用的类型与初始化变量的类型不同,这里将在一块新的内存地址产生一个新的只读变量;int* ptr = (int*)&trc;rc = 'g';*ptr = 'k';printf("c = %c\n", c);printf("rc = %c\n", rc);printf("trc = %c\n", trc);printf("&c = %p\n", &c);printf("&rc = %p\n", &rc);printf("&trc = %p\n", &trc);printf("Press Enter Key to Continue... ...");getchar();return 0;
}

代码执行结果如下:

C++中的const变量和引用相关推荐

  1. C++中的const关键字(zz)

    [补充]mutable关键字 有时我们希望类的数据成员即使在const成员函数中,依然是可以修改的,这时就可以把它们声明为mutable来实现.这样的应用,比如记录各种操作的调用次数,这时,即使在co ...

  2. 【C++】修改const变量的值

    如下代码片段中声明const变量ci并初始化为1,原则上其值是无法被修改的.但是如下的代码对const变量的内容进行了修改 int main(){const int ci = 1;int *pci = ...

  3. C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法

    <p style="line-height: 19px; margin: 10px auto; color: rgb(75, 75, 75); font-family: Verdana ...

  4. C++ 类中特殊成员变量(常量、静态、引用)的初始化方法

    有些成员变量的数据类型比较特别,它们的初始化方式和普通数据类型的成员变量有所不同.这些特殊类型的数据类型包括: 引用(&) 常量(const) 静态(static) 静态常量(static c ...

  5. plsql 中的记录型变量和引用型变量

    /* plsql 中的记录型变量和引用型变量 查询某个员工的姓名和工资 练习记录型变量: 定义变量: emp_rec emp%rowtype; sql语句: select * into emp_rec ...

  6. ansible 修改文件变量_Ansible Playbook中的变量与引用

    Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. Ansible自动化运维 前言 前面有说到使用playbook来搞一些复杂的功能, ...

  7. 【C/C++】理解传值引用和调用引用:函数调用中,为变量赋值,传入其指针;为指针赋值,传入指针的指针

    大清早收到消息,好久前写的帖子(链接)下,有人问我问题: 原函数是这样的: void Attach(int c, int e, Polynomial *pRear){Polynomial P;P = ...

  8. python中可以使用变量来引用函数-python如何引用其他py文件里的函数

    python引用其他py文件里的函数方法 Python中在脚本中引用其他文件函数的方法 在导入文件的时候,Python只搜索当前脚本所在的目录,加载(entry-point)入口脚本运行目录和sys. ...

  9. Python中的变量、引用、拷贝和作用域

    在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样.在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可.但是,当用变量的时候,必须要给这个变量赋值:如果只写一个变量,而没 ...

最新文章

  1. centos 6安装 vim
  2. 浅谈Redis与MySQL的耦合性以及利用管道完成MySQL到Redis的高效迁移
  3. Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题
  4. 调用可能未定义的方法 attachVideo (通过 static 类型 flash.media:Video 引用)解决办法
  5. 【渝粤题库】国家开放大学2021春2108刑法学(2)答案
  6. sum(x) over( partition by y ORDER BY z ) 分析
  7. python3 判断文件是否存在_Python判断文件是否存在的三种方法
  8. XMLHttpRequest2 异步 ajax
  9. 决策树(六)--随机森林
  10. [MySQL FAQ]系列 -- Linux命令行下快速监控mysql
  11. matlab实现图像滤波——高斯滤波
  12. 数据仓库建设之总线矩阵/总线架构
  13. 天了噜,原来有效的复盘要这样做,微妙
  14. python定向爬取淘宝中商品的名称和价格
  15. part3_模块五作业
  16. 战场地图上的 Faked Shadow 基本实现
  17. jetson nano 报错Illegal instruction(core dumped)
  18. 让更多人用到自己的代码,让信仰在风中飘扬
  19. python标签打印_Python 实现自动完成A4标签排版打印功能
  20. unity怎么导入系统的树_Unity5.0_树_软件教程_资源库

热门文章

  1. android genymotion插件安装,安装Genymotion插件
  2. 猿创征文|date-fns 天助手函数
  3. 读书笔记:《跨越山丘:刑辩律师丁一元办案实录》
  4. HTTPS 的认证流程
  5. Linux系统操作综合讲解(初级难度)
  6. 散点图绘制+纵向条形图+横向条形图+多组条形图绘制+直方图(原始数据和非原始数据的处理)
  7. 火山PC大文件读写操作
  8. 【转载】[Python数据处理] 怎样用Python预处理txt文档提取数据
  9. android MD5校验码的生成与算法实现
  10. 传送机制以及ACK机制详解