為什麼使用static_cast(x)而不是(int)x在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日

2K+ 閱讀量

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告