推 QQ29:請問return B();是回傳一個暫時物件嘛? 10/27 13:36
→ QQ29:另外 我不知道operator這個耶...原來不能有回傳型別.... 10/27 13:40
→ QQ29:不過@@ B obj=B(p);改為這樣後 obj.Y[0]卻是印出1....怎麼會 10/27 13:43
→ QQ29:真的搞糊塗了 第三部分就是測試印出來的值 是多少跟轉型之 10/27 13:43
→ QQ29:間的關係是什麼 ~~觀念模糊 10/27 13:44
→ QQ29:雖然說改那樣可以過 但是return B();讓我很不解..那本來的p呢 10/27 13:45
→ POSIX:是暫時的 return by value, 之後做copy 給obj 10/27 13:49
→ POSIX:是2是1, 是你的constructor設定的呀 -.- 10/27 13:49
推 QQ29:那p的資訊不就完全的失去了嘛? 是不是我誤會什麼了@@ 10/27 13:51
→ QQ29:是不是我對轉型的本質涵義根本就誤會了... 10/27 13:54
→ POSIX:int a = b; 就這樣 -.- b 不會消失 10/27 13:56
推 QQ29:可是我不是就是希望a要=b嘛 這樣變成根本就只是創一個物件給 10/27 13:58
→ QQ29:obj~ 那p不就完全沒顧慮他了? 而且為啥用reinterpret結果不同 10/27 13:58
例子弄的太簡潔 可能我誤導你了
我的意思是想讓你知道
cast operator 並不知道有class B 這個type
所以要自己定義
如果怕和reinterpret_cast搞混
那你就把那行替換成
operator B(){return reinterpret_cast<B &>(*this);}
這樣應該就會和直接使用
reinterpret_cast 結果一樣
並且將p的值都copy 過來
你所測試 去掉& 的結果應該也會符合你要的
2
2
2
一個是在外面直接暴力做
一個是在class裡面, 透過data type casting operator來做
※ 編輯: POSIX 來自: 140.117.176.163 (10/27 14:09)
推 QQ29:喔原來是*this this就是我這例子的p 我剛剛沒有想到@@ 10/27 14:09
→ QQ29:那改成這樣可以嘛?operator B(){B *tmp = (B*)this; 10/27 14:14
→ QQ29:不用到reinterpret 10/27 14:15
→ POSIX:你在繞圈圈唷..cast operator definition 中用cast operator 10/27 14:18
推 QQ29:不好意思可否在問一下B *bb = (B*)&p;的話 10/27 14:20
→ QQ29:(bb->Y[0])印出來的值是多少 這是要怎麼解釋@@ 10/27 14:20
→ POSIX:將p的位置做起始位置,以B來解釋之 .... 這樣有懂嗎 @@ 10/27 14:33