【发布时间】:2021-12-27 21:36:29
【问题描述】:
有人可以向我解释为什么这段代码不会改变 a 的值吗? 是否可以更改 const 数据值?
案例一:
const int a = 2;
*((int*)&a) = 3;
std::cout << a;
案例2:
const int a = 2;
const_cast<int&>(a) = 3;
std::cout << a;
【问题讨论】:
-
const数据应保持不变。 -
@ZakiMkn:因为 C++ 不是一种安全的语言。有一些方法可以打破在某些情况下有效但并非在所有情况下都有效的规则。
-
@ZakiMkn 它具有未定义的行为。编译器通常不能对此发出警告。程序员有责任不引起未定义的行为。见stackoverflow.com/questions/2397984/…
-
@ZakiMkn 未定义的行为未定义。也许它现在可以工作,也许它不会,也许它会在未来工作,也许它会让你的电脑变砖,对于会发生什么没有一致的定义。
-
“那么这段代码在做什么?为什么它编译得很好?” 在 cmets 中有这些额外的问题,我倾向于推断 real问题这里是“为什么 C++ 有未定义的行为?”