http://windsplife.blogspot.tw/2010/09/cstaticcast-dynamiccast-reinterpretcast.html
http://ot-note.logdown.com/posts/173174/note-cpp-named-type-convertion
有四種static_cast,dynamic_cast,reinterpret_cast,const_cast
其實網頁上寫的應該都是很詳細了
所以這裡我只是就我認知寫一下,
http://ot-note.logdown.com/posts/173174/note-cpp-named-type-convertion
有四種static_cast,dynamic_cast,reinterpret_cast,const_cast
其實網頁上寫的應該都是很詳細了
所以這裡我只是就我認知寫一下,
Static_cast<T>exp是靜態轉換
它等同於(T)exp
直接舉例好了
int a = 5;
double b = (int)a; or
double b = static_cast<int>(a);
總之主要就是算術轉型
一般用這個大部分都是用來做算術轉型
雖然他也可以用來轉型指標,但是不保證安全,尤其在多重繼承的情況下,幾乎是很容易出錯,也就是失敗
而主要指標一般有需要用來轉型,一般是在一般的變數結構裡
例如一個一維陣列
char* rrr = new char[100 * 3];
就是一個一維陣列存RGB存100筆
一般我們可以宣告一個結構去接他
Struct aaa
{
Char r;
Char g;
Char b;
};
Aaa* temp = (aaa*)rrr;
這樣只要temp[xx].r,就可以很明瞭的作存取值的動作
一般做繼承的class的指標轉換會用dynamic_cast去轉,但是網頁上有說dynamic_cast轉class,class內必須有virtual function才會成功
總之要是有多層結構,記得用dynamic_cast去轉換,轉失敗他會回傳NULL,
雖然說dynamic_cast需要做一些檢查,但是其實在繼承的架構底下,指標轉來轉去,沒用這個基本上會莫名其妙的錯誤,所以有時候還是要乖乖地做轉換
剩餘兩個其實比較不常用
reinterpret_cast就是強制轉換,反正轉換完他就用新的類型的bit結構去處理
例如:
int* i;
char* str = "test";
i = reinterpret_cast<int*>(str);
您會發現*i讀出會是134514704
總之就是強制bit轉換,轉換後直接把原來的bit樣子用轉換後的類型去解讀
至於const_cast其實我也不常用,總之網頁上是將const類型轉換為一般類型,通常會用const都是為了做保護,把他轉換為可讀寫的,一般容易亂,建議少用
它等同於(T)exp
直接舉例好了
int a = 5;
double b = (int)a; or
double b = static_cast<int>(a);
總之主要就是算術轉型
一般用這個大部分都是用來做算術轉型
雖然他也可以用來轉型指標,但是不保證安全,尤其在多重繼承的情況下,幾乎是很容易出錯,也就是失敗
而主要指標一般有需要用來轉型,一般是在一般的變數結構裡
例如一個一維陣列
char* rrr = new char[100 * 3];
就是一個一維陣列存RGB存100筆
一般我們可以宣告一個結構去接他
Struct aaa
{
Char r;
Char g;
Char b;
};
Aaa* temp = (aaa*)rrr;
這樣只要temp[xx].r,就可以很明瞭的作存取值的動作
一般做繼承的class的指標轉換會用dynamic_cast去轉,但是網頁上有說dynamic_cast轉class,class內必須有virtual function才會成功
總之要是有多層結構,記得用dynamic_cast去轉換,轉失敗他會回傳NULL,
雖然說dynamic_cast需要做一些檢查,但是其實在繼承的架構底下,指標轉來轉去,沒用這個基本上會莫名其妙的錯誤,所以有時候還是要乖乖地做轉換
剩餘兩個其實比較不常用
reinterpret_cast就是強制轉換,反正轉換完他就用新的類型的bit結構去處理
例如:
int* i;
char* str = "test";
i = reinterpret_cast<int*>(str);
您會發現*i讀出會是134514704
總之就是強制bit轉換,轉換後直接把原來的bit樣子用轉換後的類型去解讀
至於const_cast其實我也不常用,總之網頁上是將const類型轉換為一般類型,通常會用const都是為了做保護,把他轉換為可讀寫的,一般容易亂,建議少用
沒有留言:
張貼留言