在C++中,無論我在網上看到後綴遞增運算符聲明的例子,它總是聲明爲C++後綴遞增運算符的常量返回類型
T& operator++(int);
,我相信這是一個後綴的正確語法增量,不是嗎?
問題是,每當我聲明後綴增量時,我用const
關鍵字聲明返回類型,以便它變成左值。
請參見示例代碼:
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++)++;
}
我從未有過這樣一個常量聲明的運營商的問題,我知道它已經救了我們的代碼從一個笨拙的同事做了一個錯誤。所以,我的問題是:
- 是否有任何缺點這樣的做法?這確實是一個好習慣嗎?
- 什麼是後綴運算符的真正正確的聲明(我的意思是標準)?
- 如果這不是標準的規定,但已經是一個很好的做法,它不應該成爲一個標準嗎?
非常感謝您的回答!
你的前綴運算符應該返回一個引用:'AClass&operator ++()' – avakar
II不能想到任何理由修改該函數的返回結果....我認爲你很好。 –
謝謝,你是對的,已經糾正了這一點,但它並沒有改變這個問題。 – Andrew