3 回答

TA貢獻1796條經驗 獲得超10個贊
編譯器檢查C ++樣式轉換。C樣式強制轉換不是,并且可能在運行時失敗
此外,可以輕松搜索c ++樣式轉換,而搜索c樣式轉換則非常困難
另一個很大的好處是4種不同的C ++風格轉換更清晰地表達了程序員的意圖。
在編寫C ++時,我幾乎總是使用C ++而不是C風格。

TA貢獻1757條經驗 獲得超7個贊
簡而言之:
static_cast<>()
給你一個編譯時檢查能力,C-Style演員沒有。static_cast<>()
更具可讀性,可以在C ++源代碼中的任何地方輕松發現,C_Style強制轉換。使用C ++強制轉換可以更好地傳達意圖。
更多說明:
靜態強制轉換執行兼容類型之間的轉換。它類似于C風格的演員表,但更具限制性。例如,C樣式轉換將允許整數指針指向char。
char c = 10; // 1 byteint *p = (int*)&c; // 4 bytes
由于這會導致指向已分配內存的1個字節的4字節指針(指向4字節數據類型的指針),因此寫入此指針將導致運行時錯誤或將覆蓋某些相鄰內存。
*p = 5; // run-time error: stack corruption
與C樣式轉換相比,靜態轉換將允許編譯器檢查指針和指針數據類型是否兼容,這允許程序員在編譯期間捕獲這種不正確的指針賦值。
int *q = static_cast<int*>(&c); // compile-time error
您還可以在有關C ++演員表的更多說明中查看此頁面:單擊此處

TA貢獻1831條經驗 獲得超9個贊
請參閱C ++強制轉換運算符的比較。
但是,對于各種不同的轉換操作使用相同的語法可能會使程序員的意圖不清楚。
此外,在大型代碼庫中找到特定類型的強制轉換可能很困難。
對于所有需要的只是簡單轉換的情況,C風格演員的普遍性可能是過度的。在具有不同功率的幾個不同鑄造操作員之間進行選擇的能力可以防止程序員無意中鑄造到不正確的類型。
- 3 回答
- 0 關注
- 1170 瀏覽
添加回答
舉報