Объясните следующее из ускоренного C ++, пожалуйста - PullRequest
0 голосов
/ 19 июля 2009

Я не понимаю следующую выдержку из Ускоренного C ++:

Начиная с

Потому что || является левоассоциативным, и из-за относительного приоритета ||, ==, и -,

r == 0 || r == строк - 1 || c == 0 || с == cols - 1 означает то же самое, что и при размещении всех его подвыражения в скобках:

((r == 0 || r == (строки - 1)) || c == 0) || c == (столбцы - 1)

и будет до

Otherwise, it does something else, which we must now define.

Я не понимаю этого. Как бы вы сказали мне то же самое своими словами?

1 Ответ

5 голосов
/ 19 июля 2009

Если у вас есть ряд условий, которые вы хотите оценить, скажем, «если x равен 1 или y равен 2, то вызовите функцию foo ()», тогда нет смысла выполнять второй тест (y равен 2), если вы уже знаете, что х равен 1. || оператор работает так:

i( x == 1 || y == 2 ) {
     foo();
}

Выражение y == 2 не будет оцениваться, если x == 1, поскольку оно не является необходимым. Это называется оценкой с коротким замыканием и может сэкономить много времени, если оценка стоит дорого.

Если это не то, о чем вы спрашиваете, пожалуйста, сделайте ваш вопрос более четким.

...