C 四種型別轉換

2021-09-21 06:33:12 字數 1514 閱讀 5713

面試題:c++有多少種cast,它們的名稱和功能各是什麼。

一種四種。

static_cast 如整型和浮點型、字元型之間的互相轉換,void 指標和具體型別指標之間的轉換,例如void *轉int *、char *轉void *等;

const_cast 運算子僅用於進行去除 const屬性或 volatile 修飾 屬性的轉換

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

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

整型和浮點型、字元型之間的互相轉換,void 指標和具體型別指標之間的轉換

#include using namespace std;

int main()

僅用於進行去除 const屬性或 volatile 修飾 屬性的轉換

#include using namespace std;

void inputint(int * num)

int main()

用於進行各種不同型別的指標之間、不同型別的引用之間以及指標和能容納指標的整數型別之間的轉換。

#include using namespace std;

int main()

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

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

特點:(1)其他三種都是編譯時完成的,dynamic_cast是執行時處理的,執行時要進行型別檢查。

(2)不能用於內建的基本資料型別的強制轉換。

(3)dynamic_cast轉換如果成功的話返回的是指向類的指標或引用,轉換失敗的話則會返回null。

(4)使用dynamic_cast進行轉換的,基類中一定要有虛函式,否則編譯不通過。

需要檢測有虛函式的原因:類中存在虛函式,就說明它有想要讓基類指標或引用指向派生類物件的情況,此時轉換才有意義。 由於執行時型別檢查需要執行時型別資訊,而這個資訊儲存在類的虛函式表中,只有定義了虛函式的類才有虛函式表。

#include using namespace std;

class a

void pp()

};class b : public a

void pp()

void functionb()

};int main()

else

system("pause");

return 0;

}

c 四種型別轉換

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

C 四種型別轉換

include include includeusing namespace std static cast 用法 static cast type id expression 該運算子把expression轉換為type id型別,但沒有執行時型別檢查來保證轉換的安全性。它主要有如下幾種用法 用於...

C 四種型別轉換

1 static cast 1.上行轉換,把派生類的指標或引用轉換成基類,此時是安全的 2.下行轉換,把基類的指標或者引用轉換成派生類,因為沒有動態監測,所以是不安全的 3.顯示型別轉換,如int轉float等 4.任意型別空指標轉任意型別空指標 5.任意型別表示式轉為void型別 如下 int a...