[英]Overloading postfix ++ operator
是否有某種強制規則, overload ++
函數必須將int
作為參數來區分自己與前綴運算符?
另外,在前綴overload ++
函數的情況下,右手操作數是如何隱式參數的?
例如++ClassObj //ClassObj is rhs, but usualy lhs is made implicit
關於第二個問題。 前綴和后綴++
都是一元運算符,它們沒有左側和右側操作數,而是應用它們的單個操作數。 也就是說,在x++
和++x
, x
是操作數,而不是右手/左手,但操作數。
然后,為什么在后綴版本的簽名中需要的int
,它需要一個人工整數參數(未使用)只是為了區分簽名並允許編譯器知道您正在聲明/定義后綴 ++
和不是它的前綴版本。 將它視為標記,最重要的是,因為語言需要不同的簽名。
是..它在標准中定義。
從標准文件13.5.7增量和減量 ,
用戶定義的函數operator ++實現了前綴和后綴++運算符。 如果此函數是沒有參數的成員函數,或者是具有類或枚舉類型的一個參數的非成員函數,則它為該類型的對象定義前綴增量運算符++。 如果函數是具有一個參數(其類型為int)的成員函數或具有兩個參數的非成員函數(其中第二個應為int類型),則它為對象定義后綴增量運算符++那種類型。 當使用++運算符調用后綴增量時,int參數的值為零。
C ++需要在函數的簽名上有所作為。 不幸的是, x++
和++x
都只有一個真正的參數,即x
。 因此,C ++設計人員在定義一個需要虛擬的未使用的int參數時選擇了一種hack
。 這導致不同的方法簽名,因此是C ++編譯器區分前綴和后綴運算符的一種方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.