Balancer, 06.07.2004 15:43:38 :Да, в этом смысле верно. Но тогда i = i++ не должно менять значение i, не так ли?
постфиксный инкремент выполняется после отработки выражения имхо. то есть отрабатывается всё выражение без инкрементов, а потом делается "второй проход", где lvalue уличённые в использовании постинкремента увеличиваются.
Balancer:По твоей логике должно быть 5 + 6 и потом увеличение i на 1 от i++ -> 12.
Я не прав?
Так оно и работает во всех случаях, кроме встроенного ++ в Си++. Там же уже после присванивания происходит скрытая операция над числом.
Определен хорошо. Стандарт - не учебник, его читать неудобно.Кирилл:Плохо определен, слишком много отдано на откуп реализациям.
trainer, 07.07.2004 09:20:59 :Орлы!
Вы пытаетесь говорить что как-то вычислять правильно, а как-то нет только потому, что так делает ваш любимый компилятор и подстраиваете свое объяснение под его поведение.
В стандарте же ясно написано - behavior is unspecified.
Что мешает переписать это выражение так, чтобы behavior был specified?
Изменение объекта - побочный эффект(side effect). Порядок проявления побочных эффектов не определен. Определено только, что в sequence point все побочные эффекты предыдущих вычислений проявились, а ни один побочный эффект последующих - нет.
Unspecified behavior - похоже на implementation-defined behavior, но при этом эта самая implementation не обязана документировать это самое behavior.
Что значит неопределён? Вы согласны, что:Изменение объекта - побочный эффект(side effect). Порядок проявления побочных эффектов не определен.
Приоритеты стандартом явно не определены.Rada:Приоритет ++ выше приориета +?
Перегруженный оператор - функция. Вызов функции - sequence point.Rada:Я же привёл перегрузку оператора. Почему там то работает нормально?
1 The following are the sequence points described in 5.1.2.3:
— The call to a function, after the arguments have been evaluated (6.5.2.2).
— The end of the first operand of the following operators: logical AND && (6.5.13);
logical OR || (6.5.14); conditional ? (6.5.15); comma , (6.5.17).
— The end of a full declarator: declarators (6.7.5);
— The end of a full expression: an initializer (6.7.8); the expression in an expression
statement (6.8.3); the controlling expression of a selection statement (if or switch)
(6.8.4); the controlling expression of a while or do statement (6.8.5); each of the
expressions of a for statement (6.8.5.3); the expression in a return statement
(6.8.6.4).
— Immediately before a library function returns (7.1.4).
— After the actions associated with each formatted input/output function conversion
specifier (7.19.6, 7.24.2).
— Immediately before and immediately after each call to a comparison function, and
also between any call to a comparison function and any movement of the objects
passed as arguments to that call (7.20.5).
trainer, 08.07.2004 10:06:55 :Приоритеты стандартом явно не определены.Rada:Приоритет ++ выше приориета +?
особенно прикольно, если позже операции присваивания
В том-то и бред, что один оператор - функция, другой - нет. Идеологически - одно и то же. Практически - фиг. Это огромный минус любому языку.
Relations between operators, such as ++a meaning a+=1, are not guaranteed for overloaded operators (over.oper), and are not guaranteed for operands of type bool.
Филич, 08.07.2004 10:46:38 :уважаемый, да вы смысла постфиксных операций не понимаете. именно после операции присванивания ему и место.
Инкремент сразу после извлечения значения. Как и в Си++ классах.
В таком случае, смысла постфиксных операций не понимает и весь остальной мир
Филич, 08.07.2004 12:04:30 :только потому что это функция.