[問題] overloading [] 疑問!!

看板C_and_CPP (C/C++)作者 (惡魔凱西)時間16年前 (2009/07/16 11:19), 編輯推噓1(102)
留言3則, 1人參與, 最新討論串1/3 (看更多)
目前正在看 C++ How to Program 5th Edition 第 11.8 章裡面有提到有關 overload [] 的程式 // overloaded subscrpit operator for non-const Arrays; // reference return creates a modifiable lvalue int &Array::operator[](int subscript) { ~~~ ~~~ } // overloaded subscript operator for const Arrays // const reference return creates an rvalue int Array::operator[](int subscript) const { ~~~ ~~~ } 因為對這寫法不太熟悉,所以又去翻了一下 C++ Primer 5th Edition 第 14.5 章裡面有寫到下面這一段話 通常如果一個 class 要定義 subscript 運算子,需要定義兩個版本: 一個是 non-const 成員函式,反回一個 reference 另一個是 const 成員函式,反回一個 const reference class Foo { public: int &operator[](const size_t); const int &operator[](const size_t) const; }; 目前不懂的是,為什麼一定要寫兩個 overload operator ? 書上本並沒有寫原因 還有,兩本書的寫法,哪種才是對的呢? 煩請大大們幫忙解決一下疑惑,感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.248.160.199

07/16 11:30, , 1F
因為你沒寫 non const的他會自己去呼叫const的 []
07/16 11:30, 1F

07/16 11:30, , 2F
反過來 你沒寫const的 const的物建 並不會呼叫nonconst的
07/16 11:30, 2F

07/16 11:30, , 3F
造成error
07/16 11:30, 3F
文章代碼(AID): #1ANfnUI4 (C_and_CPP)
文章代碼(AID): #1ANfnUI4 (C_and_CPP)