LINUX.ORG.RU
Ответ на: комментарий от stalcker

Не будет.
Т.к. значение левого аргумента оператора || будет равно true, правый не будет вычисляться.
Такая же фигня с &&: ((2 < 3) && (++i > 5)) ничего не сделает с i.

ringill
()
Ответ на: комментарий от stalcker

> Вот и хочу узнать оговорено это в стандарте, или это на совести создателей компилятора.

Это оговорено в стандарте.

execve
()
Ответ на: комментарий от execve

Но не у всякого компилятора есть совесть...

const86 ★★★★★
()

если тебе заведомо нужно чтоб инкремент работал, напиши лучше

(( ++i > 5) || ( 3 > 2))

pashka_r
()
Ответ на: комментарий от pashka_r

>все зависит от компилера

Примеры в студию.

По стандарту в выражениеях вида A||B не вычисляется B, если А истинно. Я не думаю, что хоть один индустриальный компилятор может себе позволить отклонения в этом месте.

anonymous
()
Ответ на: комментарий от anonymous

watcom (который если кто помнит под dos4gw компилил) как я помню при A && B дох...

#define SIZE 10 char tmp[SIZE];

if (a<SIZE && tmp[a]==0) {....}

Вот на этом как раз дох... И борланд по-моему... И даже GCC можно опциями компилера в это дело вогнать...

vahvarh ★★★
()
Ответ на: комментарий от anonymous

>> По стандарту в выражениеях вида A||B не вычисляется B, если А истинно. Я не думаю, что хоть один индустриальный компилятор может себе позволить отклонения в этом месте.

можно переопределить оператор || :) и будет вычисляться и левая и правая часть.

anonymous
()
Ответ на: комментарий от anonymous

>можно переопределить оператор || :) и будет вычисляться и левая и правая часть.

на сях????

ты крут!!!

cvv ★★★★★
()
Ответ на: комментарий от cvv

>> на сях???? >> ты крут!!!

На С++. Вообще-та нигде не было явно указано, на каком языке это написано. Может быть вообще на Java или C# :)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.