是a = 0; b =(a ++,a + 1); 未定义的行为(UB)?

Khu*_*hid 21 c++ undefined-behavior c++11

看简单的例子:

int a = 0;
int b = (a ++  ,  a + 1); // result of b is UB or well defined ?  (c++03).
Run Code Online (Sandbox Code Playgroud)

这在c ++ 11/c ++ 14中有所改变吗?

CB *_*ley 28

结果很明确,自C++ 98以来.逗号运算符在写入和第二次读取之间引入了一个序列点(或后面的C++序列中的"按顺序排序"),a并且我没有看到任何其他未定义行为的潜在原因.

  • 请注意,有问题的代码在C中也是完全合法的,并且在C中也给出了定义的结果. (7认同)
  • @SChepurin:幸运的是,有一个明确定义的C++程序的客观定义,这个标准胜过所有信念.:) (3认同)
  • 我强烈*相信*,当大多数人不确定时,代码必须添加"我相信......",并且只有一些人确切知道不是*明确定义* (2认同)