[問題] C++幾種新式cast的用法

看板C_and_CPP (C/C++)作者 (好人超)時間16年前 (2009/12/28 22:38), 編輯推噓6(609)
留言15則, 6人參與, 最新討論串1/4 (看更多)
我想要請問一下,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

12/28 22:48, , 1F
static_cast<T>(exp) 與傳統的 (T)exp 是相同的意思
12/28 22:48, 1F

12/28 22:49, , 2F
這句話 我之前我有波過文問過 結論似乎不是一樣的
12/28 22:49, 2F

12/28 22:50, , 3F
dynamic cast應該就是用來判定 安全下轉 機制
12/28 22:50, 3F

12/28 22:50, , 4F
其實我也很想知道這幾種 非用不可是哪邊...
12/28 22:50, 4F

12/28 23:08, , 5F
小弟在利用VC6環境開發的時候,嘗試用static_cast去轉換指
12/28 23:08, 5F

12/28 23:09, , 6F
標,但結果是編譯未能通過,像這樣:static_cast<int*>(p)
12/28 23:09, 6F

12/28 23:10, , 7F
而p本身是char*型。但改用(int*)p就可行。
12/28 23:10, 7F

12/28 23:11, , 8F
目前還不清楚是static_cast本身不支援這樣,還是VC6當中
12/28 23:11, 8F

12/28 23:11, , 9F
編譯器的特性
12/28 23:11, 9F

12/28 23:12, , 10F
int*轉成char*要用reinterpret_cast
12/28 23:12, 10F

12/28 23:13, , 11F
也有人說static_cast<T>應用來代替所有需要使用(T)的地方
12/28 23:13, 11F

12/28 23:13, , 12F
static_cast 要指標型態對轉只能與 void * 做
12/28 23:13, 12F

12/28 23:18, , 13F
唔……小弟的疑問解決了
12/28 23:18, 13F

12/29 04:20, , 14F

01/06 12:41, , 15F
loveme大大列的文章(MSDN)內講解的非常清楚...
01/06 12:41, 15F
文章代碼(AID): #1BECBys5 (C_and_CPP)
文章代碼(AID): #1BECBys5 (C_and_CPP)