推 flamo:std::swap(A(x), *this); // 這樣? 05/14 22:46
這樣寫編不過
→ CrBoy:這樣真的行得通嗎?如果可以的話,那能不能用 *this=A(x); ? 05/15 00:44
不能
推 flamo:這樣更好! swap裡做了些沒必要做的事 05/15 00:52
不能的原因同樣是編不過
別用繼承啦
「朕不給的,你不能拿!」
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.82.39
→ flamo:我用gcc4.3, gcc3.4, vc2008都可以compile,要不要check一下? 05/15 09:07
推 coldstars:第一個不能編 第二個可以 個人是覺得第二個似乎可行...? 05/15 10:35
→ coldstars:第一個不能編是因為rval不能塞到non-const lval的位子 05/15 10:35
→ coldstars:只要一點點舊的編譯器應該都不夠嚴格 gcc-4.4就會抓了 05/15 10:36
推 flamo:第一個gcc不行,vc可以. 應該要 A a(x); swap(a, *this); 05/15 10:47
→ flamo:vc2008 Warning Level開最高(w4)也沒 warning, 冏 05/15 10:48
→ littleshan:嗯,是我看錯,第二個可以 05/15 12:27
→ coldstars:阿 第二個要這樣 *(static_cast<A*>(this))=A(x) 05/15 13:01
→ coldstars:雖然試了一下不會蓋掉vptr 但說真的沒什麼把握XD 05/15 13:01
推 flamo:轉型有必要? 跟vptr有關係? 只是Copy Assignment吧? 05/15 13:43
→ coldstars:忘記orz 我是說如果用繼承的話... 05/15 18:15
推 CrBoy:coldstars: 我這邊是設定A是derived class 所以this的type 05/15 18:38
→ CrBoy:本來就是A*了 你指的是不是*(static_cast<B*>(this))=B(x);? 05/15 18:39
→ coldstars:是的! 05/16 00:11
推 flamo:等同這樣? B* pb = this; *pb = B(x); 05/16 02:44
推 ilovebbs:不過B那個不是原po自己沒辦法動的嗎? 05/17 11:23