是否需要執行一條規則,overload ++
函數必須採用int
作爲參數以區別於前綴運算符?重載postfix ++運算符
此外,在前綴overload ++
函數的情況下,右手操作數是如何隱含參數?
E.g ++ClassObj //ClassObj is rhs, but usualy lhs is made implicit
是否需要執行一條規則,overload ++
函數必須採用int
作爲參數以區別於前綴運算符?重載postfix ++運算符
此外,在前綴overload ++
函數的情況下,右手操作數是如何隱含參數?
E.g ++ClassObj //ClassObj is rhs, but usualy lhs is made implicit
關於第二個問題。前綴和後綴++
是一元運營商,他們沒有一個左手側和右手邊操作數,但它們所應用的單一操作數。也就是說,在x++
和++x
,x
是的操作數,不是右手/左手,而是的操作數。
然後在這是爲什麼在後綴版本的簽名要求int
,它需要一個人工整數參數(未使用)只是爲了區分簽名和允許編譯器知道你是聲明/定義了後綴++
而不是前綴它的版本。考慮它作爲標籤,比其他任何東西都要多,因爲語言需要不同的簽名。
是..它在標準中定義。
從標準文檔13.5.7增量和減量,
稱爲操作者++用戶定義的函數實現了前綴和後綴++運算符。如果此函數是不帶參數的成員 函數,或者具有一個類或枚舉類型參數的非成員函數,則它爲該類型的對象定義 前綴增量運算符++。 如果函數是帶有一個參數(其中 應該是int類型)的成員函數或者是帶有兩個參數(其中第二個參數應該是int類型)的非成員函數,那麼它將定義後綴增量運算符++對於那種類型的對象。當使用++運算符作爲 的結果調用後綴增量時,int參數的值將爲零。
C++需要對函數的簽名做出區別。不幸的是,x++
和++x
都只有一個實際論點,即x
。所以C++設計人員選擇了一種hack
來定義一個要求虛擬未使用的int參數。這會導致不同的方法簽名,因此C++編譯器會將前綴與後綴運算符區分開來。
難道不是'operator ++'而不是'overload ++'? – ndim 2011-03-11 08:24:29
[如何區分(當超載時)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
沒有'左'和'因爲操作員是一元操作符*。 – 2011-03-11 08:29:30