рассмотрите этот код (С++):
int x = -4 , y = 5 ;
bool result = x > 0 && y++ < 10 ;
выражение (x > 0) будет оцениваться первым, а поскольку (x > 0 = false) и из-за вычисления с коротким замыканием, другое выражение (y++ ‹ 10) не будет оцениваться, и значение y останется равным 5 .
теперь рассмотрим следующий код:
int x = -4 , y = 5 ;
bool result = (x > 0) && (y++ < 10) ;
ожидается, что выражения в круглых скобках будут оцениваться первыми, так что до того, как будет выполнено логическое И, будет вычислено выражение (y++ ‹ 10), и значение y станет равным 6, но реальность такова, что значение y остается 5 . это означает, что даже со скобками вычисление сокращается, а выражение (y++ ‹ 10) игнорируется.
Чем объяснить этот случай?!
x > 0
всегда оценивается первым в обоих случаях. - person Adam Rosenfield   schedule 11.10.2012