С оператор инкремента++
Как различать перегрузку 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-нет.