我正在尝试更改定义为 int const 的变量的值,如下所示。
const int w = 10;
int* wp = const_cast <int*> (&w);
*wp = 20;
即使在赋值之后,w 的值也没有改变,仍然是 10,尽管它显示 w 和 wp 似乎都指向相同的内存位置。但如果在声明时定义如下,我可以更改 w 的值
int i = 10;
const int w = i;
如果我改变 i 的声明使其成为 const 就像
const int i = 10;
w 的值不会改变。
在第一种情况下,为什么 w 的值没有改变,即使 w 和 wp 指向相同的内存位置[这是我打印它们的地址时得到的印象]
编译器以不同的方式处理这两种情况有什么区别?
有没有办法确保 w 不会失去常量,无论它的定义方式如何?
这是 const 强制转换未定义的情况之一,因为代码可能经过优化,使得 w 并不是真正的变量,并且在编译的代码中并不真正存在。
请尝试以下操作:
const volatile int w = 10;
int &wr = const_cast <int &> (w);
wr = 20;
std::cout << w << std::endl;
无论如何,我不建议像这样滥用 const_cast 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)