gpt4 book ai didi

c++ - 即使通过 const_cast 更改了 const 变量,也能获得相同的值

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:03 24 4
gpt4 key购买 nike

考虑以下代码片段:

int main()
{
const int i=3;
int *ptr;

ptr=const_cast<int*>(&i);
*ptr=5;

cout<<"i= "<<i<<endl; <------------------- statement 1
cout<<"*ptr= "<<*ptr<<endl; <------------- statement 2

return 0;
}

我得到的输出是:

i= 3
*ptr= 5

http://ideone.com/Bvme6

为什么i的值没有通过指针改变?

我知道放弃显式声明为 const 的变量的 const-ness 并修改其值是“未定义行为”。我很想知道:'编译器用值替换程序中的变量'是否是任何编译器优化机制?。这意味着语句 1 被编译器解释为:

cout<<"i= "<<3<<endl;

即使声明

ptr=const_cast<int*>(&i);    

被替换为

 ptr=(int*)(&i);

我得到相同的输出:http://ideone.com/5lzJA

最佳答案

Is it any compiler optimization mechanism that compiler replaces the variable in the program with the value?

是的;这就是为什么您看不到值(value)发生变化的原因。试图修改 const 对象的行为是未定义的,以便允许这样的优化(以及允许将对象放置在不可写的内存中)。

关于c++ - 即使通过 const_cast 更改了 const 变量,也能获得相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11690773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com