SO 上最受歡迎的問題之一是處理各種運算子多載的問題。關于括號運算子的多載,我有些不明白operator[]。我的問題是關于以下代碼:
class X {
value_type& operator[](index_type idx);
const value_type& operator[](index_type idx) const;
// ...
};
這里運算子多載了兩次,一個允許成員更改的函式,另一個不允許。我讀到 c 不允許按回傳型別多載函式,但這看起來像。T&更改為const T&. 有人可以向我解釋這種“多載”究竟是什么,為什么會這樣?
提前致謝。
PS:如果這是因為第二個 const 關鍵字將“不可見”this指標引數更改為const this那么我理解,但是,這種做法是否有名稱?
uj5u.com熱心網友回復:
為了使多載作業,函式需要有不同的簽名(回傳型別不計算在內)。
在方法中,this指向物件的指標也算作隱式(第一個)引數。靜態方法當然沒有this指標,因此可以將它們視為全域函式。
在您的示例中,這兩種方法具有不同的引數。idx在這兩種情況下都是相同的,但第一個方法有一個this型別X*為 的指標,它是一個變數指標。在第二種方法中,this指標是一個常量型別:const X*因此與第一種不同,這就是多載起作用的原因。
回傳值與多載無關。如果只有回傳值不同,編譯器將不允許多載。
class X {
value_type& operator[](index_type idx);
const value_type& operator[](index_type idx) const;
// -----------------------^^^^^
// This is what makes the overloading possible.
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/376237.html
