С оператор инкремента++

Как различать перегрузку 2-х версий operator ++ ?

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

какой?

i++;
++i;

4 ответов


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

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


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

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

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

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

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


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


подумайте о постфиксном приращении i++ как имеющий второй (отсутствующий) параметр (т. е. i++x). Таким образом, подпись postfix increment имеет параметр righthand, а префикс increment-нет.