snb писал(а):PV писал(а):или вовсе 7, или даже 6
Думаеццо, тут ты загнул. Это как у нас в Курске выступает группа "Пилот" с новой концертной программой "1+1=1". Вот такой вот у них компилятор…
Так у них просто булево поле, и + соответсвенно - логический.
Alex ilmarranen писал(а):PV писал(а): Потому что сайдэффект оператора = не обязан выполняться после ++.
Вотъ тутъ неправда ваша…
Стандартъ(CPP во всяком случае) явно подразумеваетъ что операторъ = выполняется справа налево… Т.е. a=b=c есть тоже что a=(b=c)
Ты (как и 90-99% людей думающих, что они знают C/С++) путаешь operator precedence &associativity и execution order.
То, что = "выполняется" справа налево - это associativity.
Приведу попроще пример на operator precedence.
Пусть есть 3 функции - f(), g() и h(), каждая печатает свое имя.
В каком порядке напечатаются их имена, если они вызваны из выражения
a=f()+g()*h();
Думаешь, сначала g, потом h, потом f?
Нет, в любом. Потому что их возвращаемые значения будут потом перемножены правильно, А САЙДЭФФЕКТЫ (такие, как вызовы функции или присвоения значения переменным) СОГЛАСНО СТАНДАРТУ МОГУТ ВОЗНИКНУТЬ В ЛЮБОЕ ВРЕМЯ В ЛЮБОМ ПОРЯДКЕ, НО ОБЯЗАНЫ ЗАКОНЧИТСЯ ВСЕ ТОЛЬКО НА SEQUENCE POINT.
Ссылку на то, что такое "sequence point" я уже приводил, напомню, он наступает:
1) для sentence - в конце sentence (условно говоря, на точке с запятой)
2) для аргументов функций - перед вызовом функции
3) для аргументов операторов for, if, while - после каждого аргумента
4) после вычисления левого аргумента НЕПЕРЕГРУЖЕННЫХ операций &&, ||, запятая, ?:
5) в конце выполнения функции
Ты видишь в этом списке "после правого аргумента operator="? Нет? Потому что его там нет. Поэтому код
int a = 5;
a=++a + ++a;
может быть прекрасно транслирован так:
MOV a, 5
MOV EAX, a
INC EAX
MOV EBX, a
MOV EBX
MOV a, EAX
ADD a, EBX
MOV a, EAX
MOV a, EBX ;sequence point
Как не сложно догадаться, рузельтатом будет 6.
Alex ilmarranen писал(а):- Код: Выделить всё
bcc32.exe -D_DEBUG
...
-oDebugFile1.obj
...-Od
...-H=DebugProject1.pch
ilink32.exe -LDebug
...-lDebug
... DebugFile1.obj , DebugProject1.exe , DebugProject1.map
Сие?
Оно. Как не сложно увидеть из оставленных мной строчек, билд был отладочный. Как я и сказал.