2010-12-21 61 views
0

在下面的语句中,在VC++中,首先评估哪个布尔表达式?此外,他们都被评估?哪个布尔表达式首先在包含OR操作的IF语句中被评估?

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

这是功课吗?查看捷径运营商。 – 2010-12-21 20:07:26

+0

X,Y,Z和T​​的类型是什么? – Bill 2010-12-21 20:30:39

+0

不是功课。需要快速回答工作。谢谢你们.. – ntsue 2010-12-22 04:09:34

回答

12

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

4

左至右第一个表达式将总是被评估(在这种情况下(X==Y)),第二个表达式(再次从左向右在这种情况下(Z==T))将仅在该第一是假评价。这被称为Short-circuit evaluation

+3

除了他们不是陈述。 – delnan 2010-12-21 19:24:18

1

X == Y将被首先评估。如果为真,并且由于条件是OR,则线上的其他内容都不会被评估。

9

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

但是,||运算符也可能被重载,并且如果它超载它不会短路。如果在此选择||的用户定义的超载用于||,则对X == YZ == T都进行评估,即使X == Y为真。 ||运算符极其罕见,因为它可能导致不直观的代码。记住它的行为与内置操作符的行为不同,这一点非常重要。