2011-03-11 62 views
3

是否需要執行一條規則,overload ++函數必須採用int作爲參數以區別於前綴運算符?重載postfix ++運算符

此外,在前綴overload ++函數的情況下,右手操作數是如何隱含參數?

E.g ++ClassObj //ClassObj is rhs, but usualy lhs is made implicit

+1

難道不是'operator ++'而不是'overload ++'? – ndim 2011-03-11 08:24:29

+0

[如何區分(當超載時)operator ++的前綴和後綴形式之間的可能的重複? (C++)](http://stackoverflow.com/questions/894804/how-to-differentiate-when-overloading-between-prefix-and-postfix-forms-of-opera) – Suma 2011-03-11 08:26:49

+0

沒有'左'和'因爲操作員是一元操作符*。 – 2011-03-11 08:29:30

回答

6

關於第二個問題。前綴和後綴++一元運營商,他們沒有一個左手側右手邊操作數,但它們所應用的單一操作數。也就是說,在x++++x,x操作數,不是右手/左手,而是操作數。

然後在這是爲什麼在後綴版本的簽名要求int,它需要一個人工整數參數(未使用)只是爲了區分簽名和允許編譯器知道你是聲明/定義了後綴++而不是前綴它的版本。考慮它作爲標籤,比其他任何東西都要多,因爲語言需要不同的簽名。

3

是..它在標準中定義。

從標準文檔13.5.7增量和減量

稱爲操作者++用戶定義的函數實現了前綴和後綴++運算符。如果此函數是不帶參數的成員 函數,或者具有一個類或枚舉類型參數的非成員函數,則它爲該類型的對象定義 前綴增量運算符++。 如果函數是帶有一個參數(其中 應該是int類型)的成員函數或者是帶有兩個參數(其中第二個參數應該是int類型)的非成員函數,那麼它將定義後綴增量運算符++對於那種類型的對象。當使用++運算符作爲 的結果調用後綴增量時,int參數的值將爲零。

3

C++需要對函數的簽名做出區別。不幸的是,x++++x都只有一個實際論點,即x。所以C++設計人員選擇了一種hack來定義一個要求虛擬未使用的int參數。這會導致不同的方法簽名,因此C++編譯器會將前綴與後綴運算符區分開來。