15:35

Чему равно следующее выражение
(t=x2-x1)*t + (t=y2-y1)*t
при x2 = 3, x1 = 1, y2 = 10, y1=5 ?

Комментарии
05.04.2010 в 16:55

Аккаунт для использования в публичных местах. Основной ник - Trotil.
Кстати, число 35 компилятором я тоже получил. :D
Это выдал gcc под MIPS для типа int. Там стало два вычитания, одно сложение (2+5) и одно умножение: 7*5=35
06.04.2010 в 03:41

Офигеть. Теперь я не верю компиляторам.
Но самое верное число ведь 50? Мне преподаватель не верит, а я не знаю, чем доказать, кроме компилятора.
06.04.2010 в 03:51

29 скорей всего неверное (ИМХО), потому что множитель t справа произведения не должен меняться, т.к. скобки выполняются в первую очередь.

50 и 35 имеют право на существование.
Тут фишка в том, что является результатом операции "a=b" - значение (константа) или переменная. Я не знаю. Склоняюсь больше к 50.

www.open-std.org/jtc1/sc22/wg21/docs/papers/201... (здесь глава 5 может быть прояснит)
07.04.2010 в 07:36

Klo-tyan

Более знающие люди подсказали, что значение такого выражения стандартом неопределено:

Except where noted, the order of evaluation of operands of individual operators and subexpressions of individual expressions, and the order in which side effects take place, is unspecified. Between the previous and next sequence point a scalar object shall have its stored value modified at most once by the evaluation of an expression. Furthermore, the prior value shall be accessed only to determine the value to be stored. The requirements of this paragraph shall be met for each allowable ordering of the subexpressions of a foil expression: otherwise the behavior is undefined.

i = v[i++] ; // the behavior is unspecified
i =7, i++, i++; // i becomes 9
i = ++i + 1; // the behavior is unspecified
i = i + 1; // the value of i is incremented

Это начало главы 5 стандарта.
07.04.2010 в 08:10

Нашел еще в тему:

С.Дьюхэрст. Скользкие места С++.djvu
Совет 14. Неопределенный порядок вычислений (стр.44)
Там похожие примеры разбираются.
07.04.2010 в 13:37

Trotil Спасибо большое!