亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

static_cast <>和C樣式轉換有什么區別?

static_cast <>和C樣式轉換有什么區別?

C++
收到一只叮咚 2019-07-30 10:48:54
static_cast <>和C樣式轉換有什么區別?有什么理由喜歡static_cast<>超過C風格的演員嗎?它們是等價的嗎?他們有什么速度差異嗎?
查看完整描述

3 回答

?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

編譯器檢查C ++樣式轉換。C樣式強制轉換不是,并且可能在運行時失敗

此外,可以輕松搜索c ++樣式轉換,而搜索c樣式轉換則非常困難

另一個很大的好處是4種不同的C ++風格轉換更清晰地表達了程序員的意圖。

在編寫C ++時,我幾乎總是使用C ++而不是C風格。


查看完整回答
反對 回復 2019-07-30
?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

簡而言之

  1. static_cast<>() 給你一個編譯時檢查能力,C-Style演員沒有。

  2. static_cast<>() 更具可讀性,可以在C ++源代碼中的任何地方輕松發現,C_Style強制轉換。

  3. 使用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 ++演員表的更多說明中查看此頁面:單擊此處


查看完整回答
反對 回復 2019-07-30
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

請參閱C ++強制轉換運算符的比較。

但是,對于各種不同的轉換操作使用相同的語法可能會使程序員的意圖不清楚。

此外,在大型代碼庫中找到特定類型的強制轉換可能很困難。

對于所有需要的只是簡單轉換的情況,C風格演員的普遍性可能是過度的。在具有不同功率的幾個不同鑄造操作員之間進行選擇的能力可以防止程序員無意中鑄造到不正確的類型。


查看完整回答
反對 回復 2019-07-30
  • 3 回答
  • 0 關注
  • 1170 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號