我的教授给了我这段代码并告诉我它有“未定义的行为”:
#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
?答案 0 :(得分:3)
您有未定义的行为,因为您正在修改声明为const
的对象。你不被允许这样做。
这是未定义行为的原因是允许编译器执行优化,在这种情况下它似乎正在执行。它已将WEEKDAYS
的所有实例替换为值7
,因此第一个cout
行变为:
std::cout << 7;
这就是为什么无论你对7
指向的对象做什么,它都会打印pWeekdays
。
但是这种行为仍未定义。根本没有理由这么做。