[問題] Operator Overloading 的問題

看板C_and_CPP作者 (好人超)時間15年前 (2010/04/15 17:20), 編輯推噓2(206)
留言8則, 3人參與, 最新討論串1/1
( *[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)

04/15 19:59, , 1F
因為這些operator自身物件都在左邊?
04/15 19:59, 1F

04/15 20:16, , 2F
因為這些行為跟動作發生在Runtime
04/15 20:16, 2F

04/16 00:44, , 3F
沒為什麼 就是單純避免你亂搞XD
04/16 00:44, 3F

04/16 00:45, , 4F
在語法上要讓=可以不是member function是可能的 畢竟你
04/16 00:45, 4F

04/16 00:45, , 5F
看那堆 += *= /= -=,都沒有規定說要是member function
04/16 00:45, 5F

04/16 00:47, , 6F
之所以你說的那些(還少了一個->*) 會被限制 只是為了防
04/16 00:47, 6F

04/16 00:48, , 7F
止你惡搞這些operator寫出很奇怪的行為XD
04/16 00:48, 7F

04/16 00:48, , 8F
比方說我寫個operator=(int, myType)
04/16 00:48, 8F
文章代碼(AID): #1BnjfBR7 (C_and_CPP)