C 的4種強制型別轉換

2021-08-22 15:07:04 字數 1332 閱讀 7952

首先看一下c語言下的型別轉換

將浮點型別值賦給整型變數時,捨棄其小數部分

將整型值賦給浮點型變數,值不變,但是以指數形式儲存

將double型別賦值給float型別變數時,注意數值溢位

字元型賦值給整型,則存入的是字元的ascll碼

將乙個int、short、long型別的值賦給char型別變數,只是將低8位放入到char中

將有符號的值賦給型別相同的無符號型別變數時,連同符號位一同傳送

在c++中4種強制型別轉換

c++中新增了4個關鍵字 static_cast、const_cast、reinterpret_cast和dynamic_cast ,它們都是用來強制型別轉換的。

1、static_cast:強制將一種資料型別轉換成另一種資料型別

用法:static_cast《型別》(變數或表示式)

int a = 10;

int b = 3;

double result = static_cast(a) / static_cast(b);

主要有以下幾種用法:

用於類層次結構中基類和派生類的指標或引用的轉換(進行上行轉換:把派生類指標或引用轉成基類表示。是安全的;進行下行轉換:把基類指標或引用轉成派生類表示是不安全的,因為沒有動態型別檢查)

基本資料型別之間轉換,如int到float

把空指標轉換成目標型別的空指標

注意:如果涉及類的話,必須是兩個相互聯絡的型別之間轉換,不一定包含虛函式。

static_cast不能轉換掉expression、volitale等屬性

2、const_cast:去除物件的指標或引用的常性。

用法:const_cast(expression)

該運算子用來修改型別的const或volatile屬性。除了const 或volatile修飾之外, type_id和expression的型別是一樣的。

常量指標被轉化成非常量指標,並且仍然指向原來的物件;

常量引用被轉換成非常量引用,並且仍然指向原來的物件;常量物件被轉換成非常量物件。

這是個錯誤的例子

const int a = 10;

const int * p = &a;

*p = 20;                  //compile error

int b = const_cast(a);  //compile error

出現兩處錯誤,第一處是試圖修改被const修飾的 *p,第二處是const_cast修飾的強制轉換型別必須是指標或者引用。

int main()

C 4種強制型別轉換

c 的四種強制型別轉換為 static cast const cast reinterpret cast和dynamic cast 型別轉換的一般形式 cast name expression 任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static cast double sl...

C 4種cast強制型別轉換

注意 盡量少使用轉型操作,尤其是dynamic cast,耗時較高,會導致效能的下降,盡量使用其他方法替代。const cast 定義 const cast轉換符是用來移除變數的const或volatile限定符 const int constant 21 const int const p con...

C 四種強制型別轉換

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