Оператор инкремента C++

Как дифференцироваться между перегрузкой 2 версий оператора ++?

const T& operator ++(const T& rhs)

какой?

i++;
++i;
10
задан Betamoo 5 May 2010 в 23:07
поделиться

4 ответа

Эти операторы являются унарными, т.е. не принимают параметр правой части.

Что касается вашего вопроса, то если вам действительно нужно перегрузить эти операторы, то для преинкремента используйте сигнатуру const T& operator ++(), а для постинкремента const T& operator(int). Параметр int является фиктивным.

10
ответ дан 3 December 2019 в 16:09
поделиться

для постфиксных операторов ++ и -- функция должна принимать фиктивный int аргумент. если у нее нет аргумента, то это префиксный оператор

3
ответ дан 3 December 2019 в 16:09
поделиться

Считайте, что постфиксный инкремент i++ имеет второй (недостающий) параметр (т.е. i++x). Таким образом, сигнатура постфиксного инкремента имеет правый параметр, а префиксный инкремент - нет.

2
ответ дан 3 December 2019 в 16:09
поделиться

Для версий, не являющихся членами, функция с одним параметром является префиксной, а функция с двумя параметрами, а второй - int - постфиксной:

struct X {};
X& operator++(X&);      // prefix
X  operator++(X&, int); // postfix

Для версий-членов версия с нулевым параметром - это префикс, а версия с одним параметром, принимающая int , - это постфикс:

struct X {
    X& operator++();    // prefix
    X  operator++(int); // postfix
};

Параметр int для вызовов постфиксных операторов будет иметь значение ноль.

11
ответ дан 3 December 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: