Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Поясни исходник


Автор: Rickert 8.9.2007, 14:42
Код
if (foo == 0) my_func(x,y,z)

Тоже самое что:
Код
foo || my_func(x, y, z)

Почему?

Автор: archimed7592 8.9.2007, 14:50
Потому что:
1) Есть sequence point после вычисления значения левого аргумента оператора ||.
2) Вычисление правого аргумент будет произведено только в том случае, если левый аргумент был вычислен как false потому что иначе вычислять правый аргумент нет смысла ибо от значения правого аргумента результат не изменится.

Оба пункта есть в стандарте.

Добавлено через 1 минуту и 15 секунд
К слову, скомпилируется это только если возвращаемое ф-цией значение имеет convertible to bool тип.

Автор: Daevaorn 8.9.2007, 14:53
Цитата(Rickert @  8.9.2007,  15:42 Найти цитируемый пост)
Почему? 

По тому что в С++ это одно и тоже если my_func возвращет что-то что приводится к bool. Полистай справочник по синтаксису.

Автор: Rickert 8.9.2007, 16:08
Понял, мерси smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)