static_cast<> 和 C 樣式強制轉換之間有什麼區別?
這裡我們將瞭解 static_cast<> 和普通 C 樣式強制轉換之間的區別。
像 (int)x 這樣的普通強制轉換是 C 樣式型別轉換,而 static_cast
這個 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);
這將生成編譯時錯誤。
廣告