msc*_*msc 4 c++ gcc-warning undefined-behavior c++17
根据C++ 17,不能保证下面的表达式中的评估顺序.它被称为未指定的行为.
int i = 0;
std::cout<<i<<i++<<std::endl;
Run Code Online (Sandbox Code Playgroud)
C++ 17 GCC编译器提供以下警告:Live Demo
prog.cc: In function 'int main()':
prog.cc:6:20: warning: operation on 'i' may be undefined [-Wsequence-point]
std::cout<<i<<i++<<std::endl;
Run Code Online (Sandbox Code Playgroud)
我不明白,在上面的c ++ 17中表达不再是未定义的行为,那么为什么编译器会发出关于undefined的警告?
似乎像gcc一样发出警告,因为这是一个极端情况,或者至少非常接近于一个.便携性似乎是一个问题.
从页面https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
在更多情况下,C++ 17标准将定义操作数的评估顺序:特别是它要求在左侧之前评估赋值的右侧,因此上面的示例不再是未定义的.但是这个警告仍然会警告他们,以帮助人们避免编写C语言和早期版本的C++中未定义的代码.
该标准令人困惑,因此在细微的情况下对序列点规则的确切含义存在争议.有关问题讨论的链接,包括拟议的正式定义,可在GCC阅读页面http://gcc.gnu.org/readings.html上找到.