面試題: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...