看板 C_and_CPP 關於我們 聯絡資訊
( *[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