c++ const知多少

o__nly 2014-04-18 11:39:08
void main()
{

const int a =10;
int b = a ;

cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "&a = " << &a << endl;

int *p = (int *)&a;
*p = 100;
b = a ;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << "*p = " << *p << endl;
cout << "p = " << p << ",&a = " << &a << endl;

}
结果如下:

求赐教。
...全文
174 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-04-21
  • 打赏
  • 举报
回复
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
oN5GrzoN 2014-04-21
  • 打赏
  • 举报
回复
const的值也可以被修改!
FeelTouch Labs 2014-04-20
  • 打赏
  • 举报
回复
楼主这个例子很好地体现了const的原理,因为你用了const,就相当于告诉编译器,在该程序执行过程中,不能对变量a进行修改。 一个故事: a的名字叫10(法律规定成年人不能改名,法律即编译器),他是0018FF44(门牌号)这个家的主人;不久,a娶了个年轻的老婆(因为年轻还可以改名)*p名字叫100,所以她的家也是0018FF44(门牌号)。
o__nly 2014-04-20
  • 打赏
  • 举报
回复
引用 6 楼 u013573183 的回复:
定义变量a volatile const int a = 10; 告诉编译器不执行优化,这样每次使用a都会读取a的值,你就看到结果了
执行结果除了&a=1;其他没变化。。
o__nly 2014-04-20
  • 打赏
  • 举报
回复
引用 3 楼 lv_liu 的回复:
不知道楼主的疑问在哪里,p是指向&a的指针,更改的是a的地址的值,但a本身的值是不会变的
我改的是*p=100,即a=100..
不要做咸鱼 2014-04-19
  • 打赏
  • 举报
回复
楼主可以设置一下断点,看内存地址的实际值,然后再看看const变量表现出来的值,内存中 确实将10变成了100,但是字面值还是10,由此楼上的观点是正确的。常量折叠
mujiok2003 2014-04-19
  • 打赏
  • 举报
回复
搜索:常量折叠
敬畏者 2014-04-19
  • 打赏
  • 举报
回复
定义变量a volatile const int a = 10; 告诉编译器不执行优化,这样每次使用a都会读取a的值,你就看到结果了
敬畏者 2014-04-19
  • 打赏
  • 举报
回复
cout << "a = " << a << endl; 优化了,这里没有去读取a的值,而是直接在编译阶段硬编码成10
Morrisss_ 2014-04-19
  • 打赏
  • 举报
回复
引用 3 楼 lv_liu 的回复:
不知道楼主的疑问在哪里,p是指向&a的指针,更改的是a的地址的值,但a本身的值是不会变的
楼主已经解引用了。。。问题不是改的谁的地址的问题。。如果用const_cast把a的const限定给去掉,那这就改成功了。不过只是个普通的强转,const限定还在,a的值就改不了
fiat0090 2014-04-19
  • 打赏
  • 举报
回复
不知道楼主的疑问在哪里,p是指向&a的指针,更改的是a的地址的值,但a本身的值是不会变的
  • 打赏
  • 举报
回复
改const做法本身就是一个错误
hlj_ljz 2014-04-19
  • 打赏
  • 举报
回复
同求!!!!!!
百曉生 2014-04-19
  • 打赏
  • 举报
回复
不明白lz的疑问,那个是定义常变量吧
Pump天天学习 2014-04-19
  • 打赏
  • 举报
回复
学习了

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧