首先在包含OR运算的IF语句中评估哪个布尔表达式?

时间:2010-12-21 19:22:10

标签: c++ visual-c++ if-statement

在下面的语句中,在VC ++中,首先评估哪个布尔表达式?另外,他们都得到评估吗?

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

4 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:9)

如果使用内置||运算符,则会在评估X == Y之前评估Z == T。内置||运算符从左到右进行求值并且短路,因此如果X == Y为真,那么根据定义X == Y || Z == T为真所以Z == T为没有评估。

但是,||运算符也可能过载,如果它过载,则不会短路。如果在||处选择了||的用户定义重载,那么即使X == Y为真,也会评估Z == TX == Y||运算符很少被重载,因为它可能导致不直观的代码。重要的是要记住它的行为与内置运算符的行为方式不同。

答案 2 :(得分:4)

将始终评估从左到右的第一个表达式(在本例中为(X==Y)),第二个表达式(从左到右,在这种情况下为(Z==T))仅在第一个表达式为{假。这称为Short-circuit evaluation

答案 3 :(得分:1)

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