→ IhateOGC:printf("0x%x\n",vptr); 06/16 18:45
→ IhateOGC:printf("0x%x\n",ptr); 06/16 18:46
→ IhateOGC:int *vptr; vptr = &var; google: pointer 06/16 18:51
→ CaptainH:意思是把 vptr 從 void* 強制轉型成 int* 06/16 18:54
→ pujols05:請問()這個是一定要加的嗎? 06/16 20:38
推 LPH66:哪一個()? C 是規定第一個要加, 第二個沒什麼疑義的話可免 06/16 20:43
→ LPH66:C++ 則是加任一個即可, 但只加後面的嚴格說來並不是轉型運算 06/16 20:44
→ LPH66:也就是說如果真的想表達轉型的話就是第一個()加上去就對了 06/16 20:44
→ LPH66:第二個 () 純粹只是用來表示誰拿來轉型 06/16 20:45
推 steve1012:C++ 用static_cast<>會不會比較好呢 06/16 21:50
→ diabloevagto:static_cast 跟 c 語法的強制轉形是一樣的,不檢查的 06/16 22:52
推 littleshan:static_cast絕不等於C式轉型,他會在compile time檢查 06/16 23:03
推 Killercat:這其實是一個很典型的「拿void*去裝任何東西」的寫法 06/16 23:17
→ Killercat:C就算了 C++請完全避免這種行為 06/16 23:17
→ Killercat:另外C式轉型 像是這個 其實很大一部份都是reinterpret 06/16 23:18
→ Killercat:reinterpret_cast就是「完全不檢查」的轉法 請絕對避免 06/16 23:18
→ Killercat:在C++裡面出現這種行為 06/16 23:18
→ azureblaze:lib用void* userdata附加lib不需要知道的資料很正常吧 06/16 23:29
推 diabloevagto:請問static_cast 在 compiler 檢查什麼? 06/17 02:29
→ LPH66:檢查多形之類的吧, C++ 要檢查的東西可多了 06/17 08:46
→ Jockey66666:多型是run-time的事情 static_cast無法檢查.. 06/17 10:18
→ Jockey66666:static_cast不能在指標與非指標間轉換ex: int to int* 06/17 10:20
→ Jockey66666:比較常遇到不能轉的例子還有const和non-const 06/17 10:27
→ azureblaze:staic_cast會把完全不合理的轉換擋掉 06/17 10:28
→ azureblaze:像是完全不相干的兩個class指標 06/17 10:29
→ Jockey66666:完全不相干的兩個class沒有方法直接轉吧 用()也一樣.. 06/17 10:37
→ Jockey66666:基本型別例外 06/17 10:37
→ azureblaze:C Style Cast的含意太多了所以c++才把他分開 06/17 10:59
→ Jockey66666:我誤解了你的意思 sry 06/17 11:01
推 Killercat:C很常見是因為無奈 xd C++除了塞thread資料以及相容舊 06/17 11:06
→ Killercat:C Libs以外 實在沒有什麼理由去塞void* 06/17 11:06
→ Killercat:況且現在有std::thread了 更該避免這種行為 06/17 11:08
→ Killercat:我是認為 在僅使用四大轉型的前提下,只要用到dynamic 06/17 11:09
→ Killercat:就代表這code設計有改進空間 用到const cast代表這code 06/17 11:09
→ Killercat:需要嚴格再檢視 至於出現reinterpret...大概八成是哪裡 06/17 11:10
→ Killercat:作錯了才需要這樣轉 06/17 11:10
→ pujols05:所以是因為強制轉型的關係int* 要變成(int *)這個意思嗎? 06/18 17:08
→ LPH66:強制轉型的語法就是型別括起來放前面 06/19 01:41