c++
的顯式型別轉換
顯式型別轉換意味著告訴編譯器「別管我,我已確定要這麼做!」,編譯器就會相信你,不再做任何其他檢查。所以要小心使用轉換。
強制型別轉換容易引發錯誤,所以被認為是一種醜陋的語法。
c++中有乙個觀念:醜陋的語法就應該用醜陋的方式表達。所以,
c++
的轉換操作符使用
***x_cast<...>()
這種一種繁瑣的形式。目的是為了讓你在使用型別轉換前三思而行,看看是不是又不需要型別轉換的方
法或設計。更重要的是,
c風格的強制型別轉換通常很難查詢。而
c++這四種轉換操作符可以用最簡單的
search
功能找到。所以更便於排錯。
這就是說,只要你在
c++中程式設計,盡量不要使用型別轉換,即使要用,也應該使用
***x_cast<..>()
這種形式
。四種轉換的大概解釋如下: 1
、static_cast
用於非多型型別的轉換。只能進行安全的或適度安全的轉換(就是說只能進行有明確定義的轉換)
char ch
;int x=ch;//
有明確定義,高位進行符號擴充套件
reinterpret_cast
中的例子不安全,不能使用2、
dynamic_cast
用於多型型別間的轉換。包括繼承類間的轉換和兄弟類間的轉換。3、
const_cast
用於移除
const, volatile
限定符。4、
reinterpret_cast
用於任意的位到位的轉換。
重新解釋了給出的物件的位元模型。 如:
char ch;
int *p=reinterpret_cast(&ch);
在進行計算以後
, *p
包含無用值
. 既有
ch,也有其他位元組的未知值,產生越界問題。因此
, 需要謹慎使用
reinterpret_cast
。並且:
reinterpret_cast
只能在指標或引用之間轉換。
C 顯式型別轉換
對於型別轉換,我在查資料的時候看到了一種很有意思的解釋,我們可以這樣理解型別轉換 某塊記憶體中的資料是不變的,而型別就是我們戴上的眼鏡,當我們戴上一種眼鏡後,我們就會用對應的型別來解釋記憶體中的資料,這樣不同的解釋就得到了不同的資訊。所謂強制型別轉換實際上就是換上另一副眼鏡後再來看同樣的那塊記憶體資...
c 顯式型別轉換
乙個命名的強制型別轉換具有以下形式 cast name expression 其中,type是轉換的目標型別,而expression是要轉換的值。如果type是引用型別,則結果是左值。cast name是static cast dynamic cast const cast reinterpret ...
C 顯式型別轉換
c 的隱式型別轉換不在此文章講述範圍。c 的顯式型別轉換有 4 種 static cast dynamic cast const cast reinterpret cast。語法 cast name expression type 是轉換的目標型別,expression 是要轉換的值。cast na...