Как различать перегрузку двух версий оператора ++?Оператор приращения C++
const T& operator ++(const T& rhs)
какой?
i++;
++i;
Как различать перегрузку двух версий оператора ++?Оператор приращения C++
const T& operator ++(const T& rhs)
какой?
i++;
++i;
Эти операторы унарные, то есть они не принимают параметр правой руки.
Что касается вашего вопроса, если вы действительно должны перегружать этих операторов, для предварительного использования используйте подпись const T& operator ++()
и для постинкремента, const T& operator(int)
. Параметр int является манекеном.
Они могут быть функциями, не являющимися членами. –
@gf True. Но это не было бы моим первым выбором для операторов инкремента. (Мой первый выбор состоял бы в том, чтобы не перегружать операторов, так или иначе.) –
@ Daniel: У вас нет выбора, если вы хотите написать итератор C++ 'ish или итератор. –
для постфикса ++ и - операторы, функция должна принимать фиктивный int
аргумент. если у него нет аргументов, то это префиксный оператор
Подумайте о приращении постфикса i++
как о наличии второго (отсутствующего) параметра (т. Е. i++x
). Поэтому postfix increment signature имеет правый параметр, в то время как приращение префикса не работает.
Для версий, не являющиеся членов, функция с одним параметром является префиксом в то время как функция с двумя параметрами, а вторыми int
является постфикс:
struct X {};
X& operator++(X&); // prefix
X operator++(X&, int); // postfix
Для членов-версий, версия с нулевым параметром является префиксом и версии один-параметра, принимающих int
является постфикс:
struct X {
X& operator++(); // prefix
X operator++(int); // postfix
};
int
параметра на звонки операторов постфиксных будет иметь нулевое значение.
@gf добавить пример, и это был бы лучший ответ –
@Caspin: Хороший момент, сделано. –
Что может написать ваш учебник на C++ по этому вопросу? – 2010-05-05 23:10:24