如果你运行代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
//cin>>a;
a=3;
b= ++a * a++;
cout<<b;
return 0;
}
,则程序输出 20。但如果您取消注释该行 cin>>a; 然后程序显示 16,虽然在这两种情况下第 7 行代码之后的变量“a”的值都是 3。这是什么原因?
如果你运行代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
//cin>>a;
a=3;
b= ++a * a++;
cout<<b;
return 0;
}
,则程序输出 20。但如果您取消注释该行 cin>>a; 然后程序显示 16,虽然在这两种情况下第 7 行代码之后的变量“a”的值都是 3。这是什么原因?
就这个表情——
是未定义的行为。并且编译器可以在不同的情况下以不同的方式递增和乘以值——这取决于他如何去做。在一种情况下,他更方便地增加到 4,乘以,然后再次增加并给出 16。在另一种情况下,增加,记住,再增加一次,将 4 乘以 5,给出 20。
不确定的行为-它是如此不确定,一切都如此矛盾-就像“波克罗夫斯基门”中的女孩... :)