2012-08-06 19 views
-2

可能重複:
Regular cast vs. static_cast vs. dynamic_castC++像vs C像casts?

我一直在使用類似C的鑄件因爲我已經被編程:

class* initializedClassInstance; 
void* test = (void*) initializedClassInstance; 

,我一直告訴某處我應該習慣C++強制轉換(static_cast,dynamic_cast ...)。

有沒有理由比其他人更喜歡(C++ over C風格)? 靜態演員和動態演員之間有區別,對吧?但是它是什麼?

謝謝!

回答

4

C-風格轉換是不安全的。

C++風格的演員行爲以另一種方式。 static_cast如果無法播放,會給你一個編譯錯誤。 dynamic_cast如果您正在投射指針,則會投射爲NULL,否則會拋出異常。

所以這可以讓你寫一個更安全的代碼。

+0

dynamic_cast將只返回NULL指針。對於引用,將拋出異常 – Andrew 2012-08-06 08:53:04

+0

@安德魯,是的,這是一個很好的觀點,謝謝。 – SingerOfTheFall 2012-08-06 08:55:59

+0

@KillianDS,這就是我的意思。一個很好的例子就是指針投射,它可以讓你投射幾乎任何東西。 – SingerOfTheFall 2012-08-06 08:57:27

1

是的,有。它給你檢查。 static_cast爲您提供編譯時檢查,dynamic_cast爲您提供運行時檢查。

你可以閱讀更多關於castshere