繁体   English   中英

意外的输出

[英]Unexpected output

#include <iostream>

int main() 
{

    const int i=10;
    int *p =(int *) &i;
    *p = 5;
    cout<<&i<<" "<<p<<"\n";
    cout<<i<<" "<<*p;
    return 0;
}

输出:

0x22ff44 0x22ff44

10 5

请解释。

好吧,您的代码显然包含未定义的行为,因此任何事情都可能发生。

在这种情况下,我相信会发生什么:

在C ++中,const ints被视为编译时常量。 在您的示例中,编译器基本上将您的“ i”替换为数字10。

您试图修改const对象,因此行为未定义。 编译器有权假定const对象的值不变,这可能解释了您看到的症状。 编译器还有权将const对象放入只读存储器中。 对于具有自动生存期的变量,通常不会这样做,但是如果const具有静态生存期,则很多情况下不会这样做; 在这种情况下,该程序将崩溃(在大多数系统上)。

我会对此做个尝试:因为没有逻辑上的输出结果,编译器必须将可怜的cout<<i<<" "优化为简单的"cout<<"10 " ,但这只是预感。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM