Re: [問題] 關於Class指標的觀念

看板C_and_CPP (C/C++)作者 (火神)時間11年前 (2013/09/08 10:40), 編輯推噓4(4088)
留言92則, 10人參與, 最新討論串16/19 (看更多)
讓我一個旁觀者來聊聊吧~ 其實回到最初的問題 會討論這個也就是只想知道 「指標究竟能不能夠轉成 int 存起來使用?」 這邊 GCC 先生在一開始的推文提到 所有的指標都能夠轉成整數其實也只是為了回答這件事而已 不過後來發現 其實指標好像也不一定能轉成 int 就討論的結果來說, 各類型的 pointer 應該被看成是特殊的 struct 裡面有可能放著函數位址, 有可能放 type, 有可能放各式各樣莫名其妙的東西 你會說所有的 struct 都可以轉成 int 嗎? 我想這問題應該是否定的 至於到後來記憶體位置變成整數什麼的 我想 GCC 先生後來的整數定義應該是 「一個由 N 個 bit 組成的空間」 那麼的確所有的東西都可以轉成整數 也不能說有錯吧 但這個整數很顯然不是 int 我相信兩邊討論的東西不一樣的時候再下去也是雞同鴨講啊 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.180.70.81

09/08 10:49, , 1F
但是顯然 G 大不認同 "所有的東西都可以轉成整數"
09/08 10:49, 1F

09/08 10:50, , 2F
所以我已經不知道他對 "整數" 的看法是什麼... Q__Q
09/08 10:50, 2F

09/08 10:51, , 3F
阿. 我知道了. 關鍵是 "轉成" 整數
09/08 10:51, 3F

09/08 10:53, , 4F
他應該是要表達所有的東西都可以用一個數字顯示出來這樣
09/08 10:53, 4F

09/08 10:53, , 5F
我們對 "轉" 是具有一般化或是特製化有觀念上的差異
09/08 10:53, 5F

09/08 10:54, , 6F
老實說之前我也以為 reinterpret_cast 是無敵的 LOL
09/08 10:54, 6F

09/08 10:55, , 7F
就像是浮點數 (3.5) 轉整數是 (3) 還是 (3.5) 的位元表示?
09/08 10:55, 7F

09/08 10:55, , 8F
reinterpret_cast 很弱阿! 你 double 不能轉 int XD
09/08 10:55, 8F

09/08 10:56, , 9F
以這個邏輯來看應該要是 3.5 的記憶體內容表示的整數
09/08 10:56, 9F

09/08 10:58, , 10F
"所有的東西都可以轉成整數"既是也不是,但我無法在這版講
09/08 10:58, 10F

09/08 11:00, , 11F
我不確定樓上指的是啥但是電子訊號有些情況的確有三種狀
09/08 11:00, 11F

09/08 11:01, , 12F
態但是那個應該是被排除在這個所有的東西外啦
09/08 11:01, 12F

09/08 11:02, , 13F
double 轉 int 應該語意上完全跟 reinterpret 不相容啊
09/08 11:02, 13F

09/08 11:02, , 14F
我只是覺得 PLT 版才是討論這種哲學問題的地方。
09/08 11:02, 14F

09/08 11:02, , 15F
所以那個不算啦~
09/08 11:02, 15F

09/08 11:03, , 16F
(跟電子訊號有幾種狀態一點關係也沒有...)
09/08 11:03, 16F

09/08 11:04, , 17F
嗯嗯那是我誤會了xD 是否有幸可以聊聊相關的哲學問題呢~
09/08 11:04, 17F

09/08 11:08, , 18F
lol 就這個版不適合啊... 我現在很後悔開啟這討論 lol
09/08 11:08, 18F

09/08 11:09, , 19F
Ebergies: 那 static_cast<void *>, reinterpret_cast<void*>
09/08 11:09, 19F

09/08 11:09, , 20F
語意相同嗎? :P
09/08 11:09, 20F

09/08 11:11, , 21F
不過 reinterpret_cast 只能轉指標. double to int 是好玩
09/08 11:11, 21F

09/08 11:13, , 22F
我覺得不同, 但以 void* 來說作用一樣吧?
09/08 11:13, 22F

09/08 11:14, , 23F
作用阿.... 這很難說. 是哲學問題 (逃)
09/08 11:14, 23F

09/08 11:15, , 24F
可以試試看把 int 用兩種方法轉成 void * 看看
09/08 11:15, 24F

09/08 11:16, , 25F
哈哈 C++ 就這點讓我覺得沒有像 C#, Python 等更高階的語
09/08 11:16, 25F

09/08 11:16, , 26F
至於作用一不一樣, 就又回到 reinterpret_cast 的老問題
09/08 11:16, 26F

09/08 11:16, , 27F
言這麼美
09/08 11:16, 27F

09/08 11:16, , 28F
指標都是假的吧? OS或是runtime會自動維護,隨時改變
09/08 11:16, 28F

09/08 11:21, , 29F
longlongint: 不是很確定 "假" 要強調的意涵?
09/08 11:21, 29F

09/08 13:00, , 30F
總覺得這樣看下來,還是不太能理解兩方的說法囧
09/08 13:00, 30F

09/08 13:01, , 31F
只能理解有些東西沒辦法轉,但dubugger裡面又有位址0.0
09/08 13:01, 31F

09/08 13:51, , 32F
重點就在 Debug 看的到位址就夠了,其他的留給有興趣的人自
09/08 13:51, 32F

09/08 13:51, , 33F
行研究囉^^
09/08 13:51, 33F

09/08 13:53, , 34F
a27417332: 有位址不代表能 "正常" 運作.
09/08 13:53, 34F

09/08 13:54, , 35F
簡單說, 如果我只把指標的"內容"給你, 而沒有型態資訊
09/08 13:54, 35F

09/08 13:54, , 36F
是無法正常呼叫運作的.
09/08 13:54, 36F

09/08 13:55, , 37F
你看 d 大的寫法可以發現他需要知道類別的資訊
09/08 13:55, 37F

09/08 13:56, , 38F
尤其在多重繼承的時候, 你同時需要知道變數與指標的型態資訊
09/08 13:56, 38F

09/08 14:04, , 39F
細節在 L 大 #1IArv-2Q 的程式碼裡.
09/08 14:04, 39F

09/08 14:11, , 40F
而 G 大只在乎到最後他會執行到函式的開頭位址 (如果有的話)
09/08 14:11, 40F

09/08 14:15, , 41F
只是這跟我們一開始討論轉型已經完全沒有關係了. XD
09/08 14:15, 41F

09/08 14:15, , 42F
F 大,關於您昨天問的2個問題,怎麼回答一半人就跑了?
09/08 14:15, 42F

09/08 14:15, , 43F
我回答完了阿? G 大你很可愛
09/08 14:15, 43F

09/08 14:16, , 44F
我要出門了喔~ 其實我很忙. XD
09/08 14:16, 44F

09/08 14:18, , 45F
難道我都很閒,還花很多時間在回答「相同」的問題?
09/08 14:18, 45F

09/08 14:18, , 46F
我覺得以您這樣的修養,很難想像您的學習進度會是如何^^
09/08 14:18, 46F

09/08 14:22, , 47F
哈,G大是該休養一下~
09/08 14:22, 47F

09/08 14:25, , 48F
個人是覺得如果一個人有「劣根性」的話,我想學習其他任何事
09/08 14:25, 48F

09/08 14:26, , 49F
XX是啊,加油!(拍拍)
09/08 14:26, 49F

09/08 14:27, , 50F
物大概只有「知其所然,卻不知其所然」的冏境,大家一起加油
09/08 14:27, 50F

09/08 14:27, , 51F
吧^^
09/08 14:27, 51F

09/08 14:32, , 52F
然後我有在想,G大的意思是指debug裡看到的位置都是
09/08 14:32, 52F

09/08 14:32, , 53F
無號正整數是這個意思?
09/08 14:32, 53F

09/08 14:35, , 54F
然後類別函數的函數指標似乎必須有額外資訊才可以拿到
09/08 14:35, 54F

09/08 14:35, , 55F
我改天有空再去翻物件模型好了0.0希望能再有新的想法
09/08 14:35, 55F

09/08 14:36, , 56F
我晚上整理一下回你信箱,因為會很長~
09/08 14:36, 56F

09/08 15:11, , 57F
真的嗎,謝謝OAQ不過直接PO在板上作為總整理不是可以讓
09/08 15:11, 57F

09/08 15:12, , 58F
其他和我一樣迷惑的新手認識0.0
09/08 15:12, 58F

09/08 15:15, , 59F
因為我需要休養一下,最近話多~_~
09/08 15:15, 59F

09/08 23:59, , 60F
哪邊有文章說明"成員函式指標"實際是儲存什麼東西嗎?
09/08 23:59, 60F

09/09 00:00, , 61F
google資料有點多,不太好找。
09/09 00:00, 61F

09/09 00:02, , 62F
09/09 00:02, 62F

09/09 00:07, , 63F
大感謝~~~~~
09/09 00:07, 63F

09/09 00:07, , 64F
你知道了其實也沒什麼用, 因為 VC 的換到 GCC 就不適用了
09/09 00:07, 64F

09/09 00:44, , 65F
看了一下VC的debug, 儲存的不是成員函式本身的指標,
09/09 00:44, 65F

09/09 00:46, , 66F
但call該指標會經過幾個jmp跳到該成員函式的位址
09/09 00:46, 66F

09/09 00:58, , 67F
所以理論上它還是個指標, 但不是該成員函式的指標
09/09 00:58, 67F

09/09 00:59, , 68F
不知道這樣的想法有無錯誤?
09/09 00:59, 68F

09/09 01:44, , 69F
資料內容不是重點,而是call function時怎麼使用這個資料
09/09 01:44, 69F

09/09 01:46, , 70F
C++應該沒有規範到member function pointer要怎麼實作XD
09/09 01:46, 70F

09/09 01:47, , 71F
因此最好的方法還是看組語了解編譯器實作方式
09/09 01:47, 71F

09/09 17:08, , 72F
還好最近從高中圖書館挖了一本組合語言,希望有幫助
09/09 17:08, 72F

09/09 17:12, , 73F
看得懂暫存器意思,其他指令意思用google就好啦
09/09 17:12, 73F

09/09 17:12, , 74F
組語的書會教你一堆定址之類有的沒的,只是要看懂反組譯
09/09 17:12, 74F

09/09 17:13, , 75F
之後的內容,不是要自己寫組語的,不用學這麼多
09/09 17:13, 75F

09/09 17:36, , 76F
a27417332: 結果我信還沒寫完 XD
09/09 17:36, 76F

09/09 19:57, , 77F
rephansu 大說對了大部份事實,其實還可以說的再更底層一點.
09/09 19:57, 77F

09/09 19:58, , 78F
只是我太想再說下去了,怕有些人又在移花接木,沒完沒了.
09/09 19:58, 78F

09/09 20:17, , 79F
G 大很想說就快說沒關係~ 我不會再回你的了~ 覺得無聊了
09/09 20:17, 79F

09/09 20:18, , 80F
rephansu: 我覺得用組語了解不是好方法~ 要從為什麼這樣設計
09/09 20:18, 80F

09/09 20:18, , 81F
例如, 要實作的話需要知道哪些資訊. 才不會陷入 "知其所以然"
09/09 20:18, 81F

09/09 20:19, , 82F
之後我都用信件討論了XD 不然 G 大一直人身攻擊 Q_Q
09/09 20:19, 82F

09/09 20:22, , 83F
我也不覺得自己是對的. 但是 G 大三招: 我說過,自己看,嘴砲
09/09 20:22, 83F

09/09 20:23, , 84F
為了修養自己~ 我不會再發文或回應了~ :)
09/09 20:23, 84F

09/09 20:26, , 85F
我也為了我的任性妄為跟 G 大和板友道歉. m(_-_)m
09/09 20:26, 85F

09/09 20:32, , 86F
F 大千萬別這麼說,只是我希望能先看清楚在討論什麼事情然後
09/09 20:32, 86F

09/09 20:32, , 87F
若有不清楚的地方以「學習態度」的方式來發問,這樣或許會比
09/09 20:32, 87F

09/09 20:33, , 88F
較好唷^^
09/09 20:33, 88F

09/09 20:33, , 89F
我不會再回囉~ G 大掰掰~ 不要再嘴砲了~
09/09 20:33, 89F

09/09 20:33, , 90F
是的 謝謝充滿個人風格的G大師
09/09 20:33, 90F

09/09 20:37, , 91F
噗噗~
09/09 20:37, 91F

09/10 12:04, , 92F
為什麼要用學習態度來問別人的嘴砲...
09/10 12:04, 92F
文章代碼(AID): #1IA-EuBm (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1IA-EuBm (C_and_CPP)