2014-05-05 28 views
2

說我有下面的類類型向下轉換使用的static_cast - 指針和對象

class base 
{ 

}; 

class der : public base 
{ 
}; 

用的static_cast可以使用對象和指針。

我嘗試以下 - 但是以下不起作用

base b; 
der m = static_cast<der>(b); 

任何建議,爲什麼第二次不起作用其中工程(指針)

base* b = new base(); 
der * m = static_cast<der*>(b); 

?不是靜態轉換處理指針和對象?它適用於指針,但它不適用於該對象?

+0

base和der之間沒有轉換(沒有構造函數用於der基礎,或者轉換運算符到der基礎)。兩個相關指針之間有轉換。 – Suma

+0

兩個相關指針之間如何轉換? – Rajeshwar

回答

8

第一個問題,你說「我有一個指針,我保證它指向一個der,所以請隨它去」。

在第二個,你可以沒有這樣的承諾,因爲你明確有base,而不是der


1。當然,因爲它沒有實際上點在der,你會得到在運行時不確定的行爲。

+2

你說過:「在第一個例子中,你說」我有一個指針,我保證它指向一個der,所以請隨它去。「1'聲明的哪一部分'der * m = static_cast (b);'狀態?因爲'b'是'base'類型的,所以你怎麼說它的類型'der'? – Rajeshwar

+1

@Oli你能解釋一下爲什麼它和指針一起工作嗎?據我瞭解表達式'dynamic_cast (候選)'。候選人的類型是「base」,而不是der – MistyD

+2

@Rajeshwar只關注作業的右側。 ''static_cast (b)'說:「嘿編譯器,你不確定'b'是否是一個指向'der'的指針(也許它是指向另一個'base'子類的指針),但我向你保證它是。」。 – Lilshieste