Hex*_*own 4 c++ compiler-warnings
代码:
int a = 0;
a = ++a % 5;
Run Code Online (Sandbox Code Playgroud)
引起警告:
warning: operation on 'a' may be undefined [-Wsequence-point]
a = ++a % 5;
~~^~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
与各种编译器一起使用时,例如gcc -Wall
这段代码行得通吗?
int a = 0;
a = (a + 1) % 5;
Run Code Online (Sandbox Code Playgroud)
为什么这是警告,并且可以安全地忽略它?
将其包装在方括号等中似乎并不能消除警告。
编辑:为澄清起见,当我看到这些警告消息时,我正在使用C ++ 17编译器。
a = ++a % 5;
Run Code Online (Sandbox Code Playgroud)
a被修改两次。在C ++ 11之前,这是未定义的行为-未指定在分配之前提交增量。从C ++ 11开始,保证首先对RHS的副作用进行评估,并a保证为1。
a = (a + 1) % 5;
Run Code Online (Sandbox Code Playgroud)
在这里,a仅被修改一次。结果a保证为1。
每条评论:运算符优先级不能确定评估顺序。尽管赋值的优先级更高,但评估顺序仍未指定(在C ++ 11之前)。