Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 递增std::cout中的变量时,指针不显示更新的值_C++_Pointers_Operator Precedence - Fatal编程技术网

C++ 递增std::cout中的变量时,指针不显示更新的值

C++ 递增std::cout中的变量时,指针不显示更新的值,c++,pointers,operator-precedence,C++,Pointers,Operator Precedence,案例2: a is 5. b is 5. c is 5. a is 10. b is 10. c is 10. 案例3: a is 5. b is 5. c is 5. a is 11. b is 11. c is 10. 我理解案例1。但是我很难理解案例2和案例3。有人能解释一下为什么在这两种情况下,c都不能用新值更新吗?操作数的求值顺序是未指定的,您在修改对象并读取它时,没有对这些操作进行排序 因此,您的程序与cout一样未定义,我认为您的问题是由所谓的序列点造成的。您可以在中对此有很

案例2:

a is 5. b is 5. c is 5.
a is 10. b is 10. c is 10.
案例3:

a is 5. b is 5. c is 5.

a is 11. b is 11. c is 10.

我理解案例1。但是我很难理解案例2和案例3。有人能解释一下为什么在这两种情况下,
c
都不能用新值更新吗?

操作数的求值顺序是未指定的,您在修改对象并读取它时,没有对这些操作进行排序


因此,您的程序与
cout一样未定义,我认为您的问题是由所谓的序列点造成的。您可以在中对此有很长的了解,但用几句话来说,它基本上说明了表达式元素的顺序或求值


更新在您的情况下,这个顺序是未定义的,尽管有些编译器似乎是从右向左的。

您可以添加输出是未定义的,因为
的操作顺序看起来像未定义和/或未指定的行为。甚至可能取决于C++使用的标准版本。排序和运算符优先级的规则几乎极其复杂,请参见和。我个人的规则是不要访问在同一个表达式中应用了
++
的对象,这有点模糊。“任何事情都可能发生”使它看起来像是未定义的行为,但如果使用旧C++(C++ 11之前)才是正确的。“未定义为…”是正确的,但没有帮助;我认为这实际上是“C++03中的UB;C++11及更高版本中未指定”,因为OP和
cout@anatolyg操作数计算在C++11中都是不排序的(§1.9,第15项),导致未定义的行为。我相信17改变了这一点。
a is 5. b is 5. c is 5.

a is 11. b is 11. c is 10.
a is 5. b is 5. c is 5.
a is 11. b is 10. c is 10.