В C ++, где бы я ни видел в сети пример объявления оператора приращения суффикса, он всегда объявляется как
T& operator++(int);
, и я считаю, что это правильный синтаксис приращения суффикса, не так ли??
Проблема в том, что всякий раз, когда я объявляю приращение суффикса, я объявляю тип возвращаемого значения с ключевым словом const
, так что он становится похожим на lvalue.
Пожалуйста, см. Пример кода:
class AClass
{
int foo;
public:
AClass(void) : foo(0) {};
// Suffix increment operator
// Consider adding const to return type
/* const */ AClass operator++(int)
{
AClass cp(*this);
foo++;
return cp;
};
// Prefix increment operator
AClass& operator++()
{
foo++;
return *this;
};
};
int main(int argc, const char* args[])
{
/* This code would fail to compile.
int bar = 5;
(bar++)++;
*/
// Similarily, I would expect this to fail
// but it will succeed unless I use const return type.
AClass a;
(a++)++;
}
У меня никогда не было проблем с таким объявленным const оператором, и я знаю, что он уже спас наш код от ошибки, допущенной неуклюжим коллегой.Итак, мои вопросы:
- Есть ли какие-либо минусы для такой практики?Действительно ли это хорошая практика?
- Что такое действительно правильное объявление суффиксного оператора (я имею в виду стандарты)?
- Если это не то, как стандарт определяет, но это уже хорошая практика, не стоитне стало ли это стандартом?
Большое спасибо за ваши ответы!