2011-05-11 93 views
2
class x 
{ 
public: 
    int y; 
    x& operator++(int); 

}; 

我想,把foo(),工作方式類似於:以前執行什麼,返回還是++?

int& foo() 
{ 
    int& ret_val = x.y; 
    x++; 
    return ret_val; 
} 

,但看起來像:

int& foo() 
{ 
    return (x++).y; 
} 

這可能嗎?什麼是更早執行,返回或++?

好的,thx爲您的答案。

「而對象的狀態增量之前的副本(i.e.-你的X &操作++(INT)犯規遵循慣例)」 我可以寫操作++(INT)按照慣例?以及如何編寫?

然後,我可以寫函數是這樣的:

int foo() {return (x++).y;} 
+0

除非我誤解了這個問題,否則返回的權利將首先評估。因此,++會在返回任何內容之前「執行」。 – Pete 2011-05-11 20:27:11

+3

如果遵循標準的C++約定,後增量運算符(x ++)不應返回要遞增的對象,而應返回先前狀態中對象的副本到增量(即 - 你的x&operator ++(int)不遵循約定)。前綴增量運算符(++ x)返回增加的原始對象。 – MarkD 2011-05-11 20:30:21

回答

8

++返回之前執行,但返回++之前固定。我開始寫出相應的代碼,但後來我意識到你的中間例子已經和你想要做的一樣了。

0

你的最終實現是錯誤的,不應該編譯,因爲你試圖形成一個非const的臨時引用。有許多懸掛引用的情況,所有這些都是不正確的,但是這個至少可以被編譯器捕獲。

相關問題