Каким образом компилятор понимает что вызывается постфиксная версия инкремента?
Каким образом компилятор понимает что вызывается постфиксная версия инкремента, если явно правый параметр не передается?
class Number {
int _number;
public:
Number(int number) : _number(number) {}
Number operator++(int);
};
Number Number::operator++(int) {
Number s(_number);
++_number;
return s;
}
int main() {
Number(1)++;
}
Ответы (1 шт):
Автор решения: DmitryK
→ Ссылка
Ну вы сами в коде в коде пишете, какой инкремент вызвать.
Number s(10);
s++; // вызвать постфиксный
++s; // вызвать префиксный
При перегрузке:
C++ использует «фиктивный аргумент» для постфиксных операторов. Этот аргумент никак внутри не используется и служит только для того, чтобы отличить постфиксную версию инкремента/декремента от префиксной версии.
class Number
{
public:
Number& operator++(); // префиксный
Number operator++(int); // постфиксный
};
В префиксной версии обычно возвращается ссылка на самого себя, а в постфиксной - копия объекта. Поэтому в общем случае префиксная версия работает быстрее постфиксной.