16 Overloading [over]

16.5 Overloaded operators [over.oper]

16.5.7 Increment and decrement [over.inc]

Вызываемая пользователем функция operator++ реализует префиксный и постфиксный ++ оператор. Если эта функция является нестатической функцией-членом без параметров или функцией-членом с одним параметром, она определяет оператор приращения префикса ++ для объектов этого типа. Если функция является нестатической функцией-членом с одним параметром (который должен иметь тип int) или функцией, не являющейся членом, с двумя параметрами (второй из которых должен иметь тип int), она определяет оператор постфиксного приращения ++ для объектов этого типа. тип. Когда постфиксное приращение вызывается в результате использования ++ оператора, int аргумент будет иметь нулевое значение.134 [Example:

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

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

void f(X a, Y b) {
  ++a;                          // a.operator++();
  a++;                          // a.operator++(0);
  ++b;                          // operator++(b);
  b++;                          // operator++(b, 0);

  a.operator++();               // explicit call: like ++a;
  a.operator++(0);              // explicit call: like a++;
  operator++(b);                // explicit call: like ++b;
  operator++(b, 0);             // explicit call: like b++;
}

end example]

Операторы префиксного и постфиксного декремента -- обрабатываются аналогично.

operator++ Явный вызов , как в выражениях вроде a.operator++(2), не имеет особых свойств: аргумент для operator++ is 2.