C 高階 C 型別轉換

2021-09-29 20:54:37 字數 1346 閱讀 2020

在c語言中,轉換的可視性比較差,所有的轉換形式都是以一種相同形式書寫,難以跟蹤錯誤的轉換

轉換使用場景:

(1)對物件(變數)進行初始化;

(2)對物件(變數)進行賦值;

(3)傳參;

(4)返回值接收;

double d = 12.34;

int a = static_cast(d);

double d = 1.34;

int* ptr = reinterpret_cast(&d);

const int c = 2;

int* p = const_cast(&c);//刪除const屬性,方便賦值

class base

protected:

int _b;

};class derived :public base

protected:

int _d;

};void fun(base* pa)

int main()

最終的執行結果是:

將基類物件b傳入函式fun中,使用static_cast可以成功轉換,但是使用dynamic_cast不可以成功轉換,第二次將子類物件傳入,都可以成功轉換;

此時pa是乙個基類指標,不能呼叫子類中的成員函式,只能呼叫基類的成員函式,如果想要呼叫子類的成員函式,只能將pa轉化為子類的指標,如果pa真正指向的是乙個子類物件,**是安全的,如果pa指向的是乙個基類物件,**不安全,dynamic_cast會進行檢查,如果不安全返回空;

注意:強制型別轉換關閉或掛起了正常的型別檢查,每次使用強制型別轉換前,程式設計師應該仔細考慮是否還有其他不同的方法達到同一目的,如果非強制型別轉換不可,則應限制強制轉換值的作用域,以減少發生錯誤的機會。強烈建議:避免使用強制型別轉換;

class date

date& operator=(const date& d) }

~date()

private:

int _year;

int _month;

int _day;

};int main()

為什麼c++需要四種型別轉換?c風格的轉換格式很簡單,但是有不少缺點的:

隱式型別轉化有些情況下可能會出問題

顯式型別轉換將所有情況混合在一起,**不夠清晰

mysql型別轉換c 型別轉換 C 型別轉換

一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...

C 高階 07 型別轉換

型別轉換就目前 get 到的在 c 裡面一共有兩種,隱式轉換跟顯式轉換 也叫強勢轉換 下面咱們乙個乙個的以 例項來介紹。1,隱式轉換 參與運算 算術運算和賦值運算 的運算元和結果型別必須一致,當不一致時,滿足下面條件時系統自動完成型別轉換 隱式轉換 1 兩種型別相容 例如 int 和 double ...

高階強制型別轉換 C (38)

靜態物件強制型別轉換例如 右邊返回了乙個techcompany型別的指標,左邊定義了乙個company型別的指標,叫做company techcompany techcompany company 這兩句話的意思是 兩個相同型別的變數通過指標賦值,但是中間經過了乙個不同型別的指標,理論上是可行的,因...