在下面的语句中,在VC ++中,首先评估哪个布尔表达式?另外,他们都得到评估吗?
if( (X==Y) || (Z==T))
{
//code here
}
答案 0 :(得分:12)
它们是从左到右评估的,如果第一个是真的,则表达式短路而第二个不被评估。
答案 1 :(得分:9)
如果使用内置||
运算符,则会在评估X == Y
之前评估Z == T
。内置||
运算符从左到右进行求值并且短路,因此如果X == Y
为真,那么根据定义X == Y || Z == T
为真所以Z == T
为没有评估。
但是,||
运算符也可能过载,如果它过载,则不会短路。如果在||
处选择了||
的用户定义重载,那么即使X == Y
为真,也会评估Z == T
和X == Y
。 ||
运算符很少被重载,因为它可能导致不直观的代码。重要的是要记住它的行为与内置运算符的行为方式不同。
答案 2 :(得分:4)
将始终评估从左到右的第一个表达式(在本例中为(X==Y)
),第二个表达式(从左到右,在这种情况下为(Z==T)
)仅在第一个表达式为{假。这称为Short-circuit evaluation。
答案 3 :(得分:1)
X == Y将首先评估。如果为真且由于条件是OR,则不会评估该行上的任何其他内容。