Оператор приращения С++

Как провести различие между перегрузкой двух версий оператора ++?

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

который один?

i++;
++i;

Ответ 1

Эти операторы унарные, т.е. они не принимают параметр правой руки.

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

Ответ 2

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

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

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

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

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

Ответ 3

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

Ответ 4

Подумайте о приращении постфикса i++ как о наличии второго (отсутствующего) параметра (т.е. i++x). Поэтому postfix increment signature имеет правый параметр, а приращение префикса - нет.