通过非常量指针修改 const
在 C 中,const 变量一旦初始化就无法修改。但是,在某些情况下,const 变量可能会被更改。考虑以下代码:
<code class="cpp">const int e = 2; int* w = (int*)&e; // (1) *w = 5; // (2) cout << *w << endl; // (3) cout << e << endl; // (4)</code>
如果运行此代码,您会注意到意外的行为:
5 2
尽管 *w 在 (2) 中更改为 5, e 仍然保持其原始值 2。这种看似矛盾的行为源于以下因素:
因此,当在运行时求值 *w 时,它返回修改后的值 (5)。但是,当 e 在编译时求值时,将使用其原始值 (2)。
这种行为在 C 中称为未定义行为。直接或间接修改 const 变量会导致不可预测的后果,在这种情况下应谨慎行事。
以上是为什么通过非 const 指针修改 const 变量看起来有效,但实际上并没有改变它的值?的详细内容。更多信息请关注PHP中文网其他相关文章!