这个例子会导致未定义的行为吗?
可能的重复:
未定义的行为和序列点
变量i
更改了两次,但是下一个示例会导致未定义的行为吗?
#include <iostream>
int main()
{
int i = 5;
std::cout << "before i=" << i << std::endl;
++ i %= 4;
std::cout << "after i=" << i << std::endl;
}
我得到的输出是:
before i=5
after i=2
Possible Duplicate:
Undefined Behavior and Sequence Points
The variable i
is changed twice, but is the next example going to cause an undefined behaviour?
#include <iostream>
int main()
{
int i = 5;
std::cout << "before i=" << i << std::endl;
++ i %= 4;
std::cout << "after i=" << i << std::endl;
}
The output I get is :
before i=5
after i=2
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,它是未定义的。赋值时没有序列点,% 或 ++ 并且您不能在序列点内多次更改变量。
编译器可以将其评估为:
或
(或其他东西)
Yes, it's undefined. There is no sequence point on assignment, % or ++ And you cannot change a variable more than once within a sequence point.
A compiler could evaluate this as:
or
(or something else)