Другие уже объяснили, почему часть после '||' не оценивается. Однако я хотел бы подчеркнуть очень важную часть стандарта, которая приводит к такому поведению. «||» логический оператор действует как точка последовательности , что требует порядка слева направо, независимо от других операторов в том же выражении.
цитата из стандартного ISO/IEC 9899 (6.5.13/14, стр 88)
В отличие от побитового | оператора, || оператор гарантии оценка слева направо; после оценки есть точка последовательности после первого операнда. Если первый операнд сравнивает не равный с 0, второй операнд не оценивается.
Другими словами, выражение «а + Ь * с» отличается от «а || Ь & & С», в том смысле, что бывший трактуется как одно выражение без точек последовательности, в то время как последний является выражением с точками последовательности. Как следует из названия, точки последовательности заставляют последовательность оценки. Как только результат полного выражения оценивается (например, когда LHS of || оценивает значение «1»), дальнейшая оценка выражения может быть остановлена. Следовательно, порядок, который вы видите.
«человек-оператор», Google найдет его для вас – jthill
Это не важно, не так ли? Вы никогда не напишете такой код в реальной программе. –
ya это правильно, но я очень смущаюсь по поводу порядка оценки, поэтому я спросил – Rasesh