2017-02-27 55 views
-3

看起來static_cast可以採取值,引用或指針並將它們轉換爲另一種類型的值,引用或指針。但是,似乎dynamic_cast,reinterpret_cast和const_cast只能參考參考和指針4種不同類型的數據類型在C++中可以採用(或通常採用)

我知道cont_cast,它只需要指針或引用而不是變量,它是不確定的行爲。不知道爲什麼將dynamic_cast,reinterpret_cast的只能採取參考和指針,什麼會發生,如果使用的dynamic_cast和reinterpret_cast的上類型。

例如,的static_cast採取可能採取指針

B* pb; D* pd; 
pointer:D* pd2 = static_cast<D*>(pb); // Not safe, D can have fields and methods that are not in B. 

對於另一個例子,假設將dynamic_cast,reinterpret_cast的取類型:

int B; char D; 
B = dynamic_cast<B>(D); 

int B; char D; 
B = reinterpret_cast<B>(D); 

會發生什麼,以及爲什麼我們應該不這樣做?

+0

爲什麼我有這麼多下來票? – lightrek

+0

我無法理解你問的是什麼問題。 –

+0

@MarkB謝謝,編輯我的問題。 – lightrek

回答

1

但是,它是不安全的的static_cast把指針作爲輸入

靜態澆鑄的一點是,它使用了編譯時的信息,以確定是否轉換是安全的。所以,你一定可以轉換使用的static_cast指針:

struct A {}; 
struct B : A {}; 

int main() { 
    B * bp = nullptr; 
    A * ap = static_cast <A*> (bp);  // OK 
    char * cp = static_cast <char*> (bp); // error 
} 
+0

編輯我的問題,現在更清楚。謝謝 – lightrek

相關問題