作者james732 (好人超)
看板C_and_CPP
標題[問題] Operator Overloading 的問題
時間Thu Apr 15 17:20:09 2010
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
在 C++ Primer 4/e 中文版第 512 頁下面有提到
「assignment(=)、subscribe([])、call(())、arrow(->)運算子必須定義為成員。
如果不這麼做,編譯期會出錯」
想請問一下,為什麼會有這樣的強制規定呢?
譬如說,它的意思是
class test
{
public:
test &operator=(test &t);
};
而不能寫
test & operator(test &1, test &2);
// VC++ : error C2801: operator= 必須是非靜態成員
這樣吧?但不知道為什麼要這麼規定?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.171.46
※ 編輯: james732 來自: 140.117.171.46 (04/15 17:24)
→ hilorrk:因為這些operator自身物件都在左邊? 04/15 19:59
→ scarsnight:因為這些行為跟動作發生在Runtime 04/15 20:16
推 holymars:沒為什麼 就是單純避免你亂搞XD 04/16 00:44
→ holymars:在語法上要讓=可以不是member function是可能的 畢竟你 04/16 00:45
→ holymars:看那堆 += *= /= -=,都沒有規定說要是member function 04/16 00:45
推 holymars:之所以你說的那些(還少了一個->*) 會被限制 只是為了防 04/16 00:47
→ holymars:止你惡搞這些operator寫出很奇怪的行為XD 04/16 00:48
→ holymars:比方說我寫個operator=(int, myType) 04/16 00:48