再论C++中的const和引用(一)
今天给大家分享一下这段时间学习c++的总结学习:c++里面的const关键字和引用。
一、const关键字的总结
1、const什么时候为只读变量,什么时候又是常量呢?
(1)const常量的判别规则:
只用字面量初始化的const常量才会进入符号表
使用其它变量初始化的const常量仍然是只读变量
被volatile修饰的const常量不会进入符号表
在编译期间不能直接确定初始值的const标识符,都被作为只读变量处理
(2)const引用的类型与初始化变量的类型
相同:初始化变量成为只读变量
不同:生成一个新的只读变量
代码版本一:
#include <stdio.h>
int main()
{
const int x = 1;//直接得到值,进入符号表,但是还是会为 x 分配空间,只不过这个空间 x 没有用而已
const int& rx = x;//rx代表只读变量,这个变量是编译器为x分配而没有使用的空间;引用代表变量的别名,而变量代表一段内存空间的别名,所以引用代表一段内存空间的别名
int& nrx = const_cast<int&>(rx); //消除 rx只读属性,和rx 代表的内存空间相同,同时c++里面的几种类型转换要掌握
nrx=5;
printf("x = %d",x);
printf("rx = %d",rx);
printf("nrx = %d",nrx);
printf("&x = %p",&x);
printf("&rx = %p",&rx);
printf("&nrx = %p",&nrx);
return 0;
}
输出结果:
root@txp-virtual-machine:/home/txp# ./a.out
x = 1
rx = 5
nrx = 5
&x = 0x7ffcc5fa8abc
&rx = 0x7ffcc5fa8abc
&nrx = 0x7ffcc5fa8abc
代码版本二:
#include <stdio.h>
int main()
{
volatile const int y = 2;// 只读变量,不会进入符号表
int *p = const_cast<int*>(&y);//y被 const修饰,取到的地址也有 const 属性,这里将地址只读属性去掉
*p = 8;
printf("y = %d",y);
printf("p = %p",p);
return 0;
}
-
焦点事件
-
会议会展
-
企业风采
-
企业风采
-
焦点事件
-
焦点事件
-
政策法规
-
产品技术
-
会议会展
-
精英视角
-
焦点事件
-
焦点事件
-
焦点事件
-
焦点事件
-
产品技术
-
焦点事件
-
企业风采
-
焦点事件
-
焦点事件
-
焦点事件
-
焦点事件
-
企业风采
-
焦点事件
-
技术原理
-
企业风采
-
焦点事件
-
综述
-
焦点事件
-
焦点事件
-
焦点事件
-
精英视角
-
焦点事件
-
焦点事件
-
精英视角
-
焦点事件
-
会议会展
-
焦点事件
-
焦点事件
-
焦点事件
-
焦点事件
-
精英视角
-
焦点事件
-
会议会展
-
焦点事件
-
焦点事件
-
焦点事件
-
焦点事件
-
焦点事件
-
焦点事件
-
精英视角