【发布时间】:2020-08-14 18:51:15
【问题描述】:
#include<iostream.h>
void main()
{
int A=5,B=10;
for(int I=1;I<=2;I++)
{
cout<<"Line1="<<A++<<"&"<<B-2<<endl;
cout<<"Line2="<<++B<<"&"<<A+B<<endl;
}
}
这个程序的输出是
Line1=5&8
Line2=11&16
Line1=6&9
Line2=12&18
我认为它会在输出的第二行和第四行中生成 17 和 19 来代替 16 和 18。这是因为,在循环的第一次运行中,首先 A 的值是 5,第一个命令打印 5&8 并且应该将 A 的值增加 1,使其变为 6。在第二个命令中,它应该打印 11&(6+ 11) 应该打印 11&17 但输出不是那样。
我的推理漏洞在哪里??
【问题讨论】:
-
你的平台/编译器/IDE/OS等是什么?此代码不应使用任何 15 岁以下的 C++ 编译器编译。
-
@Jean-BaptisteYunès 您的链接适用于 C。(虽然我不知道 C 和 C++ 之间是否存在差异。我大致记得规则在 C++17 中发生了一些变化,其中有些情况现在是实现定义的行为,以前是未定义的行为。)
-
这能回答你的问题吗? Undefined behavior and sequence points
标签: c++ loops variables increment