有人可以向我解释输出内容吗?

时间:2019-04-07 14:49:18

标签: c++ c++11

好的,所以当我将if( (i = 4) || (i = 5) )中的“ =”更改为“ ==”时,它将返回hello world。但是,当“ {=”保持为“ =”时,输出为空。它没有给我带来语法错误,因为您需要在if

中放入“ ==
void f( int i )
 {
 if( (i = 4) || (i = 5) ) return;
 cout << "hello world\n" ;
 }

 int main()
 {
 f( 3 );
 f( 4 );
 f( 5 );
 return 0;
 }

因此,当代码为“ if( (i = 4) || (i = 5) )”时,输出为(如屏幕为空)。 当代码为“ if( (i == 4) || (i == 5) )”时,输出为 hello world

我的主要问题是:为什么===在输出中有所不同,却没有给我带来语法错误?

2 个答案:

答案 0 :(得分:2)

正如@Carcigenicate所说,===是不同的。

==用于比较,=用于分配。

答案 1 :(得分:1)

分配a = b不仅将变量a中的值设置为b,而且还返回了b的值。这样,就可以进行类似a = b = c的赋值,因为返回的值要放入a与设置为b的值相同。您可以在条件条件中使用此技巧,例如:

int x;
while(x = functionWhichCouldReturnZero()){
  // Do something with x
}

当C ++尝试将返回值解释为布尔值(truefalse)时,它将0解释为false,将所有其他值解释为{{1 }}。

另一方面,对于true,这是一个纯条件,如果(a == b)等于true,则返回a,否则返回{{1} }。