int a = 5;
if(a = 5)
{
cout<<"111111"<<endl;
}
if(a = 0)
{
cout<<"22222"<<endl;
}
结果是
111111 按任意键继续
根据一些评论,赋值成功,结果为真。</p>
"a = 0" 和 a = 1" 应该分配成功。但结果只是第一次执行....
为什么 ?
int a = 5;
if(a = 5)
{
cout<<"111111"<<endl;
}
if(a = 0)
{
cout<<"22222"<<endl;
}
结果是
111111 按任意键继续
根据一些评论,赋值成功,结果为真。</p>
"a = 0" 和 a = 1" 应该分配成功。但结果只是第一次执行....
为什么 ?
一些评论?这似乎很狡猾,在这种情况下是不正确的。
operator=
on s的结果int
是已经赋值的值。在这种情况下,a = 5
结果为 0。因为评估为您看到“111111”,但因为评估为您没有看到“22222”。5
a = 0
5
true
0
false
至于为什么赋值导致值被赋值,以多个赋值的情况为例:
a = b = 5;
这与以下内容相同:
a = (b = 5);
因此,要使其按预期工作,(b = 5)
必须返回 5。
is的结果和a=5
is5
的结果,所以你的程序是这样的:a=0
0
int a = 5;
if(5)
{
cout<<"111111"<<endl;
}
if(0)
{
cout<<"22222"<<endl;
}
由于 if 语句需要一个布尔值,因此隐式5
转换为true
和0
转换为。false
所以你的程序现在是这样的:
int a = 5;
if(true)
{
cout<<"111111"<<endl;
}
if(false)
{
cout<<"22222"<<endl;
}
所以它只会打印“111111”。
“根据一些评论,赋值成功,结果为真”赋值的结果是左边表达式的结果。
"a = 0" 和 a = 1" 应该分配成功。但结果只是第一次执行....
没有。0
是假的,你还不如写”
if(0) { /* some code which will never execute */ }
该if
语句计算括号之间的表达式的结果,这意味着在检查条件之前必须完全计算表达式本身。