c ++,用多个`&&`来计算表达式,没有低优先级的运算符

Mat*_*son 2 c++ evaluation expression expression-evaluation operator-precedence

如果表达式计算多个&&运算符,并且不计算任何较低优先级的运算符(例如||,?:),那么只要其中一个&&s返回0,表达式是否会计算为0,还是会完成对剩余&&s的计算?

例如,

q=0; w=1; e=1; r=1;
if(q && w && r && e) {}
Run Code Online (Sandbox Code Playgroud)

if()一旦q && w评估为0,这将评估为false (因为&&无论右手操作符如何,其余的必须全部评估为0)?

pmd*_*mdj 5

是的,一旦遇到错误表达,评估将提前终止("短路").这有一个例外:如果&&运算符已经为相关类型的参数重载.这是非常沮丧的,非常罕见,但可能会发生.