运营商优先权

tyl*_*r16 2 c++ operator-precedence

我有一个样本中期问题,我不太确定.这里是:

#include <iostream.h>

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

int main()
{
f( 3 );
f( 4 );
f( 5 );
return 0;
}
Run Code Online (Sandbox Code Playgroud)

所以我理解逻辑OR运算符具有更高的优先级,并且从左到右读取.我也明白,正在使用的是赋值运算符而不是关系运算符.我只是不明白如何理解这一切.编译器会检查的第一件事是4 || i?如何评估以及之后会发生什么?

Rei*_*ica 8

让我们添加所有的隐含括号(记住,||具有更高的优先级==是右关联):

i = ((4 || i) = 5)
Run Code Online (Sandbox Code Playgroud)

因此,它首先评估4 || i,评估为true(实际上,它甚至忽略i,因为4true||短路).然后它尝试为此分配5哪些错误.