【发布时间】:2014-07-10 14:58:40
【问题描述】:
我的教授给了我这段代码,并告诉我它有“未定义的行为”:
#include <iostream>
int main()
{
const int WEEKDAYS = 7;
const int *pWeekdays = &WEEKDAYS;
*((int*)pWeekdays) = 9;
std::cout << WEEKDAYS;
std::cout << *pWeekdays;
return(0);
}
它给出以下输出:
79
我正在尝试理解以下内容:
- 为什么行为未定义?
- 为什么打印
*pWeekdays输出9但打印WEEKDAYS输出7?
【问题讨论】:
-
您有未定义的行为。你不能指望这段代码做任何可靠的事情。
-
修改a const is undefined behavior,很可能因为它是一个常量,编译器正在用文字替换它,甚至不评估变量。
-
@juanchopanza 我的教授这样称呼它......但我不明白这两个变量的行为。
-
这是一个有趣的问题,虽然它是重复的,但不赞成将代码作为图像发布。
-
唯一要了解的是程序可以为所欲为。您可以在您的特定平台上查看此代码生成的汇编代码,以确切了解发生了什么。
标签: c++ constants undefined-behavior