學習筆記 c 強制型別轉換

2021-10-08 19:49:46 字數 1659 閱讀 8940

型別轉換的含義是通過改變乙個變數的型別為別的型別從而改變該變數的表示方式。為 了型別轉換乙個簡單物件為另乙個物件你會使用傳統的型別轉換操作符。

c 風格的強制型別轉換,不管什麼是什麼型別,統統都是 type b = (type)a; c++風格的型別轉換提供了4 種型別轉換操作符來應對不同場合的的應用。

定義這幾個類

#include

#include

"myvector.hpp"

using

namespace std;

class

animal

;class

cat:

public animal

;class

building

;

1,static_cast它能在內建的資料型別間互相轉換,對於類只能在有聯絡的指標型別間進行轉換。可以在繼承體系中把指標轉換來、轉換去,但是不能轉換成繼承體系外的一種型別。

void

test01()

2.dynamic_cast 僅能應用於指標或者引用,不支援內建資料型別 。它不僅僅像 static_cast 那樣,檢查轉換前後的兩個指標是否屬於同乙個繼承樹,它還要檢查被指標引用的物件的實際型別,確定轉換是否可行。

void

test02()

3.cosnt_cast去掉型別中的常量性 也就是去掉const關鍵字,

const_cast中的型別必須是指標、引用或指向物件型別成員的指標

void

test03()

4.reinterpret_cast任何指標都可以轉換成其它型別的指標,感覺該轉換很強大,但是ibm的c++指南、c++之父bjarne stroustrup的faq網頁和msdn的visual c++也都指出:錯誤的使用reinterpret_cast很容易導致程式的不安全,只有將轉換後的型別值轉換回到其原始型別,這樣才是正確使用reinterpret_cast方式。

typedef

void

(*funcptr1)

(int

,int);

typedef

int(

*funcptr2)

(char);

void

test04()

總結

結論 1:程式設計師必須清楚的知道要轉變的變數,轉換前是什麼型別,轉換後是什麼型別, 以及轉換後有什麼後果。

結論 2:一般情況下,不建議型別轉換,避免進行型別轉換。

結論3:一般情況下,父類指標轉換成子類指標會有問題,子類指標轉換成父類指標沒有問題。

感謝點讚!!!

c 強制型別轉換 學習筆記

c 強制型別轉換分為四種,static cast,dynamic cast,const cast,reinterpret cast 一.為什麼在c 中還有特殊的四種強制轉換 二.static cast include iostream intmain 三.const cast include ios...

C 強制型別轉換

四種型別可能很多人都常常忽略就象我一樣,但是有時還是比較有用的。不了解的建議看看,一些機制我也不是十分了解,只是將一些用法寫出來讓大家看看。強制轉化無論從語法還是語意上看,都是c 中最難看的特徵之一。但是基於c風格的轉化的語義的不明確性及其一些潛在問題。強制型別轉化最終還是被c 接受了。1.stat...

C 強制型別轉換

標準c 中主要有四種強制轉換型別運算子 const cast,reinterpret cast,static cast,dynamic cast等等。1 static cast a 將位址a轉換成型別t,t和a必須是指標 引用 算術型別或列舉型別。表示式static cast a a的值轉換為模板中...