2013-08-03 7 views
2

Я видел своего рода «поэтический» код в некоторой базе кода. Хотя он выглядит прямо, просто хочу подтвердить, если он в правильном направлении.
В очень простой форме:Использование логического оператора без какого-либо условного оператора или записи в переменной

bool foo(); 
bool bar(); 

int main() { 
    foo() or bar(); // <--- line 
} 

ли код на выделенной линии так же хорошо, как показано ниже фрагмент кода?

if(foo() == false) 
    bar(); 

Я знаю , оператора, где все операторы вызываются, но не уверены в or (эквивалент ||) оператора.
Тестирование в g ++ дает expected output.

+1

Бросьте несколько триграфов в этом, и это делает это стихотворение совершенно болезненным, кстати. = Р. Независимо от того, ваш вопрос касается многочастичной булевой оценки короткого замыкания, и да, 'exp1 || exp2' * почти * тот же. Единственное, чего не хватает, это неиспользуемый результат 'exp2' * *, который в обоих случаях все равно выброшен (если он достигнут в первую очередь, что происходит только с' exp1', равно нулю). – WhozCraig

+0

Прошу прощения @iammilind, но это обман. В следующий раз убедитесь, что вы используете Google C++-операторы или тому подобное. –

+0

Возможный дубликат [Как работает C++ handle &&? (Оценка короткого замыкания)] (http://stackoverflow.com/questions/5211961/how-does-c-handle-short-circuit-оценка) –

ответ

1

Да, Оператор or - это текстовый эквивалент ||.

Так что вы сказали correct.

0

Если первое условие true другой не оценивается больше (в || «s случай) и поэтому это, как вы сказали:

if(foo() == false) 
    bar(); 

То же самое относится и к &&, когда, если Первое условие - false, второе не оценивается больше.

+1

Что делать, если второе условие ложно для &&. В && второе условие не оценивается, если сначала ложно. – Saksham

+0

извините, это была опечатка .. я имел в виду, что 1-е является ложным. исправленный ответ –