Re: [語法] 關於operator==

看板C_and_CPP (C/C++)作者 (累人啊....)時間16年前 (2009/09/07 16:35), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
: 推 LPH66:GetID() 加個 const 宣告如何? (ie. int& GetID() const;) 09/07 13:51 : 推 QQ29:L大 一般不是你 加上const 回傳的地方也該加上 const int &嘛 09/07 14:01 : 推 QQ29:還是只是為了滿足他這case 希望還可以使用==設值@@ 09/07 14:03 : → tyc5116:Q大,我不懂的地方就在於為何回傳值一定要const int& 09/07 15:06 : → tyc5116:因為我在另一個專案測試的時候是不用的,所以我想問一下 09/07 15:06 : → tyc5116:目前這樣compile不過的原因是?? 09/07 15:07 : 推 QQ29:如果你只寫 int &GetID() const; 你可以在外部(main)寫 09/07 15:20 : → QQ29:xxx.GetID()=值 這就失去了你原本寫 const的意義 09/07 15:20 : → QQ29:可以看 effective c++ 條款3 他還有分兩派說法 但是我不太懂 09/07 15:22 : → QQ29:他表達的用意 09/07 15:22 不好意思喔,再問一下,我了解Q大所說的是什麼,但我還是不知道為何我這樣寫不行 再一個類似的例子 class TableA{ public: TableA(int vAID,string vName); void SetAID(int vID); int& GetAID(); void SetName(string vName); string& GetName(); bool operator==(const TableA& vTableA) const; private: int AID; string Name; }; 而operator的實作為 bool TableA::operator ==(const TableA& vTableA) const{ return (this->AID == vTableA.AID) && (this->Name==vTableA.Name); } 然後在主程式中 list<TableA> aaa; aaa.push_back(TableA(1,"a")); aaa.push_back(TableA(2,"b")); aaa.push_back(TableA(3,"c")); cout<<aaa.size()<<endl; aaa.remove(TableA(2,"b")); cout<<aaa.size()<<endl; 這樣的話,以size來檢查,是正常的(我主要只是想要list的remove可以成功動作而已) 但這個例子和上個例子來說,我看不出哪裡不一樣,但為什麼一個會成功一個不會呢? 請各位說明一下,謝謝 ps.後來我發現到,前者取ID是透過GetID(),然後會有錯 後者則是直接讀取ID的屬性,但是,我還是不懂為什麼第一個的方法不行..@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.18.48.28 ※ 編輯: tyc5116 來自: 163.18.48.28 (09/07 16:50)
文章代碼(AID): #1AfCNlMl (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
以下文章回應了本文
完整討論串 (本文為第 2 之 3 篇):
文章代碼(AID): #1AfCNlMl (C_and_CPP)