C 四種強制型別轉換介紹

2021-10-05 11:56:24 字數 2015 閱讀 4213

c風格的強制轉換(type cast)容易理解,不管什麼型別的轉換都可以使用使用下面的方式。

typename b = (typename)a;

規則:當然c++也是支援c風格的強制轉換,但是c風格的強制轉換可能帶來一些隱患,讓一些問題難以察覺。所以c++提供了一組可以用在不同場合的強制轉換的函式。

在c++語言中新增了四個關鍵字const_cast、static_cast、dynamic_cast和reinterpret_cast。這四個關鍵字都是用於強制型別轉換的。

新型別的強制轉換可以提供更好的控制強制轉換過程,允許控制各種不同種類的強制轉換。

c++中風格是static_cast(content)。c++風格的強制轉換其他的好處是,它們能更清晰的表明它們要幹什麼。程式設計師只要掃一眼這樣的**,就能立即知道乙個強制轉換的目的。

2.1)const_cast:

在c語言中,const限定符通常被用來限定變數,用於表示該變數的值不能被修改。

而const_cast則正是用於強制去掉這種不能被修改的常數特性,但需要特別注意的是const_cast不是用於去除變數的常量性,而是去除指向常數物件的指標或引用的常量性,其去除常量性的物件必須為指標或引用。

我們看乙個錯誤的例子:

#include using namespace std;

int main()

正確示例:

#include using namespace std;

int main()

}return nullptr;

}int main() ;

int val = 4;

int* p = const_cast(search(a,5,val));

if (p == nullptr)

}return null;

}int main() ;

int val = 4;

int& p = const_cast(search(a,5,val));

if (p == null)

/*ptr_addr 的值(hex): 0061e6d8

*/

2.4)dynamic_cast:

dynamic_cast是執行時處理的,執行時要進行型別檢查,其他三種都是編譯時完成的。在c++中,編譯期的型別轉換有可能會在執行時出現錯誤,特別是涉及到類物件的指標或引用操作時,更容易產生錯誤。dynamic_cast操作符則可以在執行期對可能產生問題的型別轉換進行測試。

規則:

#includeusing namespace std;

class base

virtual void i_am_virtual_foo() {}

};class sub: public base

virtual void i_am_virtual_foo() {}

};int main()

cout << "base> sub2base val is: " << sub2base << endl;

//base->sub

base *base = new base();

base->print();

sub *base2sub = dynamic_cast(base);

if (base2sub != nullptr)

cout <<"sub> base2sub val is: "<< base2sub << endl;

delete sub;

delete base;

return 0;

}

輸出:

i'm sub

i'm base

base> sub2base val is: 00b9e080  

i'm base

sub> base2sub val is: 00000000  

分析:在我們可以將由子類上轉型父類的物件,再下轉型成子類物件。

C 四種強制型別轉換

c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...

C 四種強制型別轉換

1 概述 去const屬性用const cast。基本型別轉換用static cast。多型類之間的型別轉換用daynamic cast。不同型別的指標型別轉換用reinterpreter cast。2 詳解加示例 a const cast 用法 const cast 型別 表示式 用途 刪除con...

C 四種強制型別轉換

c風格的強制型別轉換 type cast 很簡單,不管什麼型別的轉換統統是 type b type a c 風格的型別轉換提供了4種型別轉換操作符來應對不同場合的應用。const cast,字面上理解就是去const屬性。static cast,命名上理解是靜態型別轉換。如int轉換成char。dy...