Конструкция допустимая. Результат не определен - скалярный объект меняется в выражении более одного раза. Пост-инкремент и присвоение.Balancer:В общем, i = i++; тоже недопустимая конструкция
Да их, знаешь, не из-за несоответствия синтаксиса ++ пишут
Всё же, по логике:
i++ возвращает старое значение i, так?
Это значение присваивается пременной i.
Филич, 06.07.2004 14:48:24 :Всё же, по логике:
i++ возвращает старое значение i, так?
Это значение присваивается пременной i.
точно так, но только наоборот: сначала присваиваем, а потом изменяем.
Squirrelcage, 06.07.2004 16:48:42 :Неопределенностей тут нет
А в Си++, как показывают, вышеприведённые примеры, operator++ для классов пользователя и ++, встроенный в систему работают по-разному. Что, сам понимаешь, нелогично.
Accessing an object designated by a volatile lvalue (basic.lval), modifying an object, calling a library I/O function, or calling a function that does any of those operations are all side effects, which are changes in the state of the execution environment. Evaluation of an expression might produce side effects. At certain specified points in the execution sequence called sequence points, all side effects of previous evaluations shall be complete and no side effects of subsequent evaluations shall have taken place.
The operator keyword declares a function specifying what operator-symbol means when applied to instances of a class. This gives the operator more than one meaning, or "overloads" it. The compiler distinguishes between the different meanings of an operator by examining the types of its operands.
You can redefine the function of most built-in operators globally or on a class-by-class basis. Overloaded operators are implemented as functions.
Филич, 06.07.2004 17:20:35 :ты чего???
Филич, 06.07.2004 17:48:48 :кстати, как думаешь, какой результат должно иметь выражение i = i++ + ++i; ?
Balancer, 06.07.2004 17:58:06 :Оп-па! А вот тут я промахнулся.
C++ (VC7) -> 13!
По твоей логике должно быть 5 + 6 и потом увеличение i на 1 от i++ -> 12.
А нет разницы между оператором и функцией (кроме быстрого вычисления && и || по типу "короткого замыкания"). Также, перегружая операторы ты не меняешь их приоритеты и ассоциативность.а в случае с class Integer - сам понимаешь ни о каких операторах речи не идет
Rada, 06.07.2004 19:04:25 :Также, перегружая операторы ты не меняешь их приоритеты и ассоциативность.