C 強制型別轉換

2022-05-02 14:21:10 字數 1376 閱讀 9374

double x;

int (x); /(int) x;

無法判定這種強制型別轉換的風險。

1、static_cast

static_cast用來進用行比較「自然」和低風險的轉換,比如整型和實數型、字元型之間互相轉換。

static_cast不能來在不同型別的指標之間互相轉換,也不能用於整型和指標之間的互相轉換,也不能用於不同型別的引用之間的轉換。

#include using

namespace

std;

classa

operator

char * ()

};int

main()

static_cast例項

2、reinterpret_cast

reinterpret_cast用來進行各種不同型別的指標之間的轉換、不同型別的引用之間轉換、以及指標和能容納得下指標的整數型別之間的轉換。轉換的時候,執行的是逐個位元拷貝的操作。

#include using

namespace

std;

classa};

intmain()

reinterpret_cast例項

3、const_cast

const_cast用來進行去除const屬性的轉換。將const引用轉換成同型別的非const引用, 將const指標轉換為同型別的非const指標。

const

string s =「inception」;

string & p = const_cast(s);

string * ps = const_cast(&s); //

&s的型別是const string *

const_cast例項

4、dynamic_cast

dynamic_cast專門用於將多型基類(包含虛函式的基類)的指標或引用,強制轉換為派生類的指標或引用,而且能夠檢查轉換的安全性。

對於不安全的指標轉換,轉換結果返回null 指標。

derived & r = dynamic_cast(b); 那該如何判斷該轉換是否安全呢? 答案:不安全則丟擲異常。

dynamic_cast不能用於將非多型基類的指標或引用強制轉換為派生類的指標或引用。

#include #include 

using

namespace

std;

class

base

};class derived:public

base ;

intmain()

輸出結果:

unsafe dynamic_cast1

dynamic_cast例項

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...