mic*_*icx 7 c++ volatile const-cast compiler-optimization
int main()
{
const int ia = 10;
int *pia = const_cast<int*>(&ia);
*pia = 5;
std::cout << &ia << "\t" << pia <<endl;
std::cout << ia << "\t" << *pia <<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
0x28fef4 0x28fef4
10 5
Run Code Online (Sandbox Code Playgroud)
*pia并ia具有相同的地址,但它们具有不同的值.我的目的是用来const_cast修改一个常量值,但结果显示它不起作用.
有谁知道为什么?
你看到10打印的原因ia很可能是编译器优化:它看到一个const对象,决定它不会改变,并用这个替换最后一个打印输出:
cout<< 10 <<" "<<*ppa<<endl;
Run Code Online (Sandbox Code Playgroud)
换句话说,生成的代码具有const"烘焙到"二进制文件的值.
抛弃最初声明为const对象并写入该对象的对象的常量是未定义的行为:
$ 5.2.11/7 - 注意:根据对象的类型,通过指针,左值或指向数据成员的指针的写入操作可能会产生未定义的行为(7.1.5.1) .
根据平台的不同,const对象可能会放置在您无法写入的受保护的内存区域中.const在类型系统中使用-ness可以帮助您的程序编译,但您可能会看到随机结果甚至崩溃.
| 归档时间: |
|
| 查看次数: |
1638 次 |
| 最近记录: |