int c = 0的结果; COUT << C++ <<℃;

Eyo*_*oka 5 c++ ostream

我认为它应该是01,但有人说它"未定义",有什么理由吗?

tze*_*nes 8

c++既是增量又是赋值.当分配发生时(在该行上的其他代码之前或之后)由编译器决定.它可以在cout <<之前或之后发生.

这可以在C99标准中 找到http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf

您可以在第28页的pdf或5.1.2.3节中找到它

p的实际增量可以在前一个序列点和下一个序列点之间的任何时间发生

由于有人要求提供C++标准(因为这是一个C++问题),可以在第1.9.15页第10节(或pdf格式的24)中找到

对各个算子的操作数和个别表达式的子表达式的评估是不确定的

它还包括以下代码块:

i = v[i++]; // the behavior is undefined
i = 7, i++, i++; // i becomes 9
i = i++ + 1; // the behavior is undefined
Run Code Online (Sandbox Code Playgroud)

我觉得C99标准的解释更清楚,但在两种语言中都是如此.

  • 它只是我,还是引用C99标准不是C++问题的一个很好的答案? (6认同)