2011-05-23 36 views
0

可能重複:
Is it allowed to name the parameter in postfix operator ++?超載後增量運算結果值在0

我創建了一個對象來保存在內部保持當前位置的對象的列表,所以我認爲這是一個重載前後增量運算符的好地方,它通過邊界檢查有效地增加了這個內部位置。

我注意到的是,當您在對象上調用++時,參數是0

測試代碼:

#include <stdio.h> 
class A { 
public: 
    A& operator++(int n) { printf("%d ", n); return *this; } 
}; 
int main() { 
    A a; 
    a++; 
    a.operator++(0); 
    a.operator++(1); 
    a.operator++(10); 
    return 0; 
} 

這將返回0 0 1 10。據我所知,這是正常的行爲。所以,它讓我重新思考如何operator++應該工作。以前,如果邊界檢查通過,我只是在我的內部位置變量上調用++。但無論輸入參數是什麼,這都會帶來遞增1的影響。接下來,我雖然使用+=使用參數n的右手邊,但你會發現,簡單地調用++沒有運營商(如通常那樣),給人以零和位置是不遞增

基本上,這是我應該擔心的事情嗎?如果是這樣,我該如何檢測用戶是否真的想要0,或者如果默認行爲(a++)是有意的,我應該增加1?

+1

相關:http://stackoverflow.com/questions/6094732/ – 2011-05-23 19:40:12

+0

真的很有趣,有一天有兩個關於這個問題。 – 2011-05-23 19:40:35

+0

@ Space_C0wb0y:實際上是重複的。 – 2011-05-23 19:42:01

回答

0

您應該忽略參數。

+0

所以,'a.operator ++(10);'在技術上不是一個有效的事情,即使它有效? – steveo225 2011-05-23 19:46:25

+0

這是完全有效的,但在任何明智的實施中,它都不會起作用。沒有人應該編寫依賴於這種行爲的代碼。這是在尋求麻煩。 – 2011-05-23 19:55:50

+0

我同意。感謝您的洞察力。 – steveo225 2011-05-23 19:57:47

0

運算符中的int放在那裏或不放在編譯器中。它表明您是否有前綴或sufix操作符。 (++ a a ++)