繁体   English   中英

哪个布尔表达式首先在包含OR操作的IF语句中求值?

[英]Which boolean expression gets evaluated first in an IF statement containing an OR operation?

在以下语句中,在VC ++中,哪个布尔表达式首先被求值? 另外,他们俩都得到评估了吗?

if( (X==Y) || (Z==T))
{
 //code here
}

从左到右评估它们,如果第一个为真,则表达式短路,而第二个不评估。

如果内置|| 使用运算符,则将先计算X == Y ,然后再计算Z == T 内置|| 运算符从左到右进行评估,并且短路,因此,如果X == Y为true,则根据定义X == Y || Z == T X == Y || Z == T为真,因此不评估Z == T

但是, || 操作员也可以过载,如果过载,也不会短路。 用户定义的||重载 选择用于|| 在这里,即使X == Y为true,也将同时评估X == YZ == T ||很少 操作符重载,因为它可能导致代码不直观。 重要的是要记住,它的行为与内置运算符的行为不同。

从左到右的第一个表达式将始终被求值(在这种情况下(X==Y) ),仅在第一个表达式为false的情况下,才将求第二个表达式(从左到右,在这种情况下(Z==T) ) 。 这称为短路评估

X == Y将首先被评估。 如果为true且由于条件为OR,则不会评估该行上的其他任何内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM