При написании f(x++)
мы имеем в виду f(x);++x
; Тем не менее, оператор для объекта обычно записывается как
foo operator++(int) {
foo temp = *this;
++*this;
return temp;
}
Могу ли я заставить его работать как
const foo operator++(int) {
return *this;
// when this code done
++this;
}
? (Серьезная причина в том, что некоторые пользователи более привыкли к x++
, чем ++x
, а для объекта обычное решение стоит копирование и деконструкция; другая причина в том, что иногда x++
соответствует значению больше, чем x;++x
)
Это решение иногда работает в среде, но иногда дает сбой, не работает с auto
и может полагаться на UB. Есть ли лучшее решение?