Я думаю, что вы хотели реализовать operator++
для своего класса, и это должно быть реализовано как:
Counter & operator++()
{
++count;
return *this;
}
Теперь вопрос в том, что он делает? Это делает предварительное увеличение. Теперь вы можете написать ++counter
, и это вызовет вышеуказанную перегрузку оператора, и которое внутренне увеличит переменную count
на 1.
Пример:
Counter counter(1);
++counter;
std::cout << counter.get_count() << std::endl;
++(++counter);
std::cout << counter.get_count() << std::endl;
Выход:
2
4
Что делает ваш оригинальный код?
Если вы попытаетесь запустить приведенный выше код, используя исходную реализацию operator++
, будет напечатано следующее:
2
3
Это потому, что вы создаете другой временный объект, который вы возвращаете, и когда вы пишете ++(++counter)
, внешнее предварительное увеличение будет увеличивать временное значение. Таким образом, внешнее предварительное увеличение не изменит значение counter.count
.
Даже если вы напишите ++(++(++(++counter)))
, это эквивалентно просто ++counter
.
Сравните вывод здесь:
Примечание ++(++counter)
НЕ вызывает неопределенного поведения .