Lunar_ пример некорректный. некоторые компиляторы на него не ворнинг а еррор скажут, что правильнее. постфиксный оператор определяется вот так: Код (Text): class MyInt { int val; public: MyInt(): val(0) {} void operator++(int) { val += 1; } int GetVal() const { return val; } }; int main(int argc, char *argv[]) { MyInt a; a++; printf("a = %d\n", a.GetVal()); return 0; } и ворнинга не будет
spa Ну, у меня в более сложную конструкцию не превратится, т.к. я считаю не читабельным писать в выражении i++ или ++i, и на мой взгляд спор не продуктивен, так что вы выиграли.
Для целочисленных встроенных типов можно: __asm { inc } Можно обернуть в макрос, мало кода, легко морфить.
2dinoweb у вас постфиксный оператор кривой таки =) он же должен значение возвращать =) MyInt operator++(int) { MyInt tmp(*this); val += 1; return tmp; } обычно также постфиксный через префиксный делают, но в этом случае все просто =). Также конечно должен быть копирующий конструктор, но сейчас и синтезируемого хватит. И данный пример ярко показывает почему постфиксные операторы не желательно использовать для объектов. Да и оптимизатор не всегда прочухает где можно сооптимизировать в отличие от встроенных типов. Поэтому следует различать постфиксные операторы для классов и встроенных типов. 2deLight я не буду объяснять почему это говнокод, ок? =) 2qwe8013 >> т.к. я считаю не читабельным писать в выражении i++ или ++i +10000
Прочти предыдущие посты, мы как раз это и обсуждаем. ))) Ага, покормите тролля) Почему асм-вставка с дефайном в с++ коде, заменяющая инкремент это гуан)
izl3sa я только привёл пример без ворнинга, дописав int. цели сделать рабочий пример не было . с необходимостью соблюдать элементарные правила языка я полностью согласен, они оправданы опытом. можно нарабатывать свой опыт, и приходить к этому, несколько раз наступив на грабли, а можно использовать чужой опыт, и не сталкиваться со многими проблемами.
Читая такие темы, лишний раз убеждаюсь что правильно решил никогда не писать на языки, имя которых начинается на "C".
Потому что в остальных выражениях разница между префиксным и постфиксным оператором очевидна. Чего тут томить. Собери потом такой код под любую архитектуру, кроме х86. К тому же даже на х86 ассемблерная вставка - это палки в колёса оптимизатору.
aсм встaвки нужно использовaть в сaмом крaйнeм случae, когдa бeз них нe обойтись. А использовaть ee в нaшeм случae кaк минимум нe профeссионaльно.