С оператор инкремента++
Как различать перегрузку 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 будет иметь нулевое значение.
подумайте о постфиксном приращении i++ как имеющий второй (отсутствующий) параметр (т. е. i++x). Таким образом, подпись postfix increment имеет параметр righthand, а префикс increment-нет.