看板 C_and_CPP 關於我們 聯絡資訊
我想要請問一下,C++有四種新式的cast operator: static_cast, dynamic_cast, const_cast, reinterpret_cast 但我卻不知道這幾種 cast 的正確使用時機 目前對它們的認識僅有: static_cast<T>(exp) 與傳統的 (T)exp 是相同的意思 其他三種則負責傳統轉型無法做到的東西 dynamic_cast<T>(exp) 與多型類別的轉換有關 const_cast<T>(exp) 可以去除"const"這個特性,讓函式傳遞時能過關 我想它們被設計出來,應該會有些場合是「非用不可」的 但是卻試不出適合的例子 特別是 reinterpret_cast, 很多書都只說一句「與平台相依」 但是卻不懂它具體該怎麼使用... 因此想要請教一下,可否對於這幾種 cast 舉些「非用不可」的範例呢? 譬如說,在哪一種狀況裡,如果不使用 dynamic_cast 就一定會錯誤之類的 這幾個東西困擾了我好久,雖然沒學會好像也沒什麼關係 XD 但就覺得不太對勁... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.46
QQ29:static_cast<T>(exp) 與傳統的 (T)exp 是相同的意思 12/28 22:48
QQ29:這句話 我之前我有波過文問過 結論似乎不是一樣的 12/28 22:49
QQ29:dynamic cast應該就是用來判定 安全下轉 機制 12/28 22:50
QQ29:其實我也很想知道這幾種 非用不可是哪邊... 12/28 22:50
oddguy:小弟在利用VC6環境開發的時候,嘗試用static_cast去轉換指 12/28 23:08
oddguy:標,但結果是編譯未能通過,像這樣:static_cast<int*>(p) 12/28 23:09
oddguy:而p本身是char*型。但改用(int*)p就可行。 12/28 23:10
oddguy:目前還不清楚是static_cast本身不支援這樣,還是VC6當中 12/28 23:11
oddguy:編譯器的特性 12/28 23:11
nowar100:int*轉成char*要用reinterpret_cast 12/28 23:12
oddguy:也有人說static_cast<T>應用來代替所有需要使用(T)的地方 12/28 23:13
UNARYvvv:static_cast 要指標型態對轉只能與 void * 做 12/28 23:13
oddguy:唔……小弟的疑問解決了 12/28 23:18
loveme00835:http://tinyurl.com/5ebwle 12/29 04:20
horngsh:loveme大大列的文章(MSDN)內講解的非常清楚... 01/06 12:41