static_cast<> 和 C 樣式強制轉換之間有什麼區別?


這裡我們將瞭解 static_cast<> 和普通 C 樣式強制轉換之間的區別。

像 (int)x 這樣的普通強制轉換是 C 樣式型別轉換,而 static_cast(x) 用於 C++。

這個 static_cast<>() 提供編譯時檢查功能,但 C 樣式強制轉換不支援該功能。這個 static_cast<>() 可以出現在 C++ 程式碼的任何地方。並且使用此 C++ 強制轉換可以更好地傳達意圖。

在像 C 這樣的強制轉換中,有時我們可以將某種型別的指標強制轉換為指向另一種型別的資料。

例如,一個整型指標也可以指向字元型別的資料,因為它們非常相似,唯一的區別是字元佔用 1 個位元組,整數佔用 4 個位元組。在 C++ 中,static_cast<>() 比 C 樣式強制轉換更嚴格。它只在相容型別之間進行轉換。

示例

char c = 65; //1-byte data. ASCII of ‘A’
int *ptr = (int*)&c; //4-byte

由於在 4 位元組指標中,它指向分配的記憶體的 1 個位元組,因此可能會產生執行時錯誤或覆蓋一些相鄰的記憶體。

在 C++ 中,static_cast<>() 將允許編譯器檢查指標和資料是否為同一型別。如果不是,它將在編譯期間引發不正確的指標賦值異常。

char c = 65; //1-byte data. ASCII of ‘A’
int *ptr = static_cast<int>(&c);

這將生成編譯時錯誤。

更新於: 2019年7月30日

3K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告