c++ - 当我总是得到相同的结果时,为什么会出现这种未定义的行为?

标签 c++

我最近在这个网站上遇到了一个关于 C++ 序列点的问题,关于 此代码将输出什么:

int c=0;
cout << c++ << c;

回答说输出是未定义的,<<不是序列点,但我还是想知道为什么它是未定义的,即使我编译了25次,它仍然打印01?

最佳答案

“未定义”意味着标准没有指定在那种情况下必须发生什么,所以根据定义,你的编译器所做的任何事情都是正确的。如果它总是打印 01,那很好。如果每次运行时它都打印不同的数字,那也很好。如果它导致猴子从你的 Nose 里飞出来(如 illustrated here ),那也没关系。

您可能不这么认为,但如果发生这种情况,编译器编写者就可以摆脱困境。

[编辑:评论中已经指出规范的引用是“鼻魔”,而不是“鼻猴”。对于任何无意的混淆,我深表歉意。任何有意造成的困惑我都感到自豪并且不为此道歉。 :-)]

关于c++ - 当我总是得到相同的结果时,为什么会出现这种未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2624693/

相关文章:

c++ - 为什么我的 Makefile 没有创建可执行文件?

c++ - 如何连接 LPCWSTR 和 char[]?

c++ - std::vector 不是异常安全的?

c++ - 打开对象的实际类型的正确方法是什么?

STL - STL count_if 的标准谓词

c++ - 为什么win api线程执行函数,而标准线程不执行?

c++ - 添加 : in front of variable gives wrong result

c++ - "Socket operation on non-socket"错误由于奇怪的语法

c++ - 在Visual Studio中将64位 double 转换为字节数组形式的80位 double

c++ - 扩展内联汇编 : same variable for input and output