Sad*_*que 1 c++ undefined-behavior visual-c++ c++11
#include <iostream>
int main()
{
const int i=10;
int *p =(int *) &i;
*p = 5;
cout<<&i<<" "<<p<<"\n";
cout<<i<<" "<<*p;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
0x22ff44 0x22ff44
10 5
请解释.
hrn*_*rnt 12
好吧,你的代码显然包含未定义的行为,所以任何事情都可能发生.
在这种情况下,我相信会发生这样的事情:
在C++中,const int被认为是编译时常量.在您的示例中,编译器基本上将您的"i"替换为数字10.
您试图修改const对象,因此行为未定义.编译器有权假设const对象的值没有改变,这可能解释了你看到的症状.编译器还有权将const对象放在只读内存中.对于具有自动生命周期的变量,它通常不会这样做,但如果const具有静态生命周期,那么会很多; 在这种情况下,程序将崩溃(在大多数系统上).
| 归档时间: |
|
| 查看次数: |
165 次 |
| 最近记录: |