簡體   English   中英

重載postfix ++運算符

[英]Overloading postfix ++ operator

是否有某種強制規則, overload ++函數必須將int作為參數來區分自己與前綴運算符?

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

例如++ClassObj //ClassObj is rhs, but usualy lhs is made implicit

關於第二個問題。 前綴和后綴++都是一元運算符,它們沒有左側右側操作數,而是應用它們的單個操作數。 也就是說,在x++++xx 操作數,而不是右手/左手,但操作數。

然后,為什么在后綴版本的簽名中需要的int ,它需要一個人工整數參數(未使用)只是為了區分簽名並允許編譯器知道您正在聲明/定義后綴 ++和不是它的前綴版本。 將它視為標記,最重要的是,因為語言需要不同的簽名。

是..它在標准中定義。

從標准文件13.5.7增量和減量

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

C ++需要在函數的簽名上有所作為。 不幸的是, x++++x都只有一個真正的參數,即x 因此,C ++設計人員在定義一個需要虛擬的未使用的int參數時選擇了一種hack 這導致不同的方法簽名,因此是C ++編譯器區分前綴和后綴運算符的一種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM