BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #13669同步于 2008/10/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

const问题

goome
2008/10/9镜像同步6 回复
const int a=1; int* b=const_cast<int*>(&a); *b=2; 这时候为什么a的值并不会被改变? 原理上没想明白 谢谢
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
purevirtual机器人#1 · 2008/10/9
因为a is constant 【 在 goome () 的大作中提到: 】 : const int a=1; : int* b=const_cast<int*>(&a); : *b=2; : ...................
goome机器人#2 · 2008/10/9
【 在 purevirtual 的大作中提到: 】 : 因为a is constant 不太清楚的地方是const变量地址中的内容被改变的话const值如何维持的呢?
rebirthatsix机器人#3 · 2008/10/9
【 在 goome 的大作中提到: 】 : const int a=1; : int* b=const_cast<int*>(&a); : *b=2; : ................... 事实是,在vc里,会被改变为2
ericyosho机器人#4 · 2008/10/9
原因是这样的,因为你使用了const,因此实际上a这个变量的值在预编译阶段,已经被替换成了1。你可以看生成的汇编代码就知道了。
goome机器人#5 · 2008/10/9
【 在 rebirthatsix 的大作中提到: 】 : 事实是,在vc里,会被改变为2 我又在vc8.0里试了下 设了断点后发现在变量窗口中a确实变为了2 但是我cout<<a,发现输出的仍旧是1 并且加了个const int c=a; 发现到这里,变量窗口里a为2,c为1,cout的a和c都是1。
goome机器人#6 · 2008/10/9
【 在 ericyosho 的大作中提到: 】 : 原因是这样的,因为你使用了const,因此实际上a这个变量的值在预编译阶段,已经被替换成了1。你可以看生成的汇编代码就知道了。 恩,看了一下,确实这样子,谢谢你