C 強制型別轉換

2021-10-02 06:36:50 字數 1365 閱讀 7441

強制型別轉換是不安全的,因此我們應該盡量避免使用強制型別轉換
靜態型別轉換:

static_cast:

用於低風險轉換,如整形、浮點型、字元型之間的相互轉換。

例:#include

using namespace std;

class static_cast

operator char*()

};int main()

reinterpret_cast:

多用於指標、引用之間的轉換,因此很不安全

例:#include

using namespace std;

class reinterpret_cast

};int main()

const_cast:

它是四個強制型別轉換運算子中唯一能夠去除 const 屬性的運算子

例:const string s = 「inception」;

string& p = const_cast (s);

string* ps = const_cast (&s); // &s 的型別是 const string*

只能用於const指標和const引用
例:

int num=10;

int & newnum=num;

const int &newnum=const_cast(newnum);

或者:int * p=(&)num;

const int *newp=const_cast

動態型別轉換:

dynamic_cast:

多型:將基類(包含虛函式的基類)的指標強制轉換為派生類的指標,但是這種轉換不檢查安全性,即不檢查轉換後的指標是否確實指向乙個派生類物件。

dynamic_cast專門用於將多型基類的指標或引用強制轉換為派生類的指標或引用,而且能夠檢查轉換的安全性。對於不安全的指標轉換,轉換結果返回 null 指標

dynamic 非常嚴格,不允許失去精度,因此不適合於基礎型別的強制型別轉換。

它僅用於,多型時父類轉子類。

例://沒有多型的情況下

class base{};

class child:public base{};

void test08()

//在發生多型的情況下

class base

};class child:public base

};void test08()

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的值轉換為模板中...

C 強制型別轉換

關於強制型別轉換的問題,很多書都討論過,寫的最詳細的是c 之父的 c 的設計和演化 最好的解決方法就是不要使用c風格的強制型別轉換,而是使用標準c 的型別轉換符 static cast,dynamic cast。標準c 中有四個型別轉換符 static cast,dynamic cast,reint...