我最近在这个网站上遇到了一个关于 C++ 序列点的问题,关于 此代码将输出什么:
int c=0;
cout << c++ << c;
回答说输出是未定义的,<<不是序列点,但我还是想知道为什么它是未定义的,即使我编译了25次,它仍然打印01?
最佳答案
“未定义”意味着标准没有指定在那种情况下必须发生什么,所以根据定义,你的编译器所做的任何事情都是正确的。如果它总是打印 01
,那很好。如果每次运行时它都打印不同的数字,那也很好。如果它导致猴子从你的 Nose 里飞出来(如 illustrated here ),那也没关系。
您可能不这么认为,但如果发生这种情况,编译器编写者就可以摆脱困境。
[编辑:评论中已经指出规范的引用是“鼻魔”,而不是“鼻猴”。对于任何无意的混淆,我深表歉意。任何有意造成的困惑我都感到自豪并且不为此道歉。 :-)]
关于c++ - 当我总是得到相同的结果时,为什么会出现这种未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2624693/