BЈо*_*вић 0 c++ undefined-behavior language-lawyer
可能重复:
未定义的行为和序列点
变量i被更改两次,但下一个示例是否会导致未定义的行为?
#include <iostream>
int main()
{
int i = 5;
std::cout << "before i=" << i << std::endl;
++ i %= 4;
std::cout << "after i=" << i << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
before i=5
after i=2
Run Code Online (Sandbox Code Playgroud)
是的,这是未定义的.有关于转让,%或者无序列点++你不能改变一个变量不止一次序列点内.
编译器可以将其评估为:
++i;
i = i % 4;
Run Code Online (Sandbox Code Playgroud)
要么
i = i % 4;
++i;
Run Code Online (Sandbox Code Playgroud)
(或者是其他东西)
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |