3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
編譯器檢查C ++樣式轉(zhuǎn)換。C樣式強(qiáng)制轉(zhuǎn)換不是,并且可能在運(yùn)行時(shí)失敗
此外,可以輕松搜索c ++樣式轉(zhuǎn)換,而搜索c樣式轉(zhuǎn)換則非常困難
另一個(gè)很大的好處是4種不同的C ++風(fēng)格轉(zhuǎn)換更清晰地表達(dá)了程序員的意圖。
在編寫(xiě)C ++時(shí),我?guī)缀蹩偸鞘褂肅 ++而不是C風(fēng)格。

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

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
請(qǐng)參閱C ++強(qiáng)制轉(zhuǎn)換運(yùn)算符的比較。
但是,對(duì)于各種不同的轉(zhuǎn)換操作使用相同的語(yǔ)法可能會(huì)使程序員的意圖不清楚。
此外,在大型代碼庫(kù)中找到特定類(lèi)型的強(qiáng)制轉(zhuǎn)換可能很困難。
對(duì)于所有需要的只是簡(jiǎn)單轉(zhuǎn)換的情況,C風(fēng)格演員的普遍性可能是過(guò)度的。在具有不同功率的幾個(gè)不同鑄造操作員之間進(jìn)行選擇的能力可以防止程序員無(wú)意中鑄造到不正確的類(lèi)型。
- 3 回答
- 0 關(guān)注
- 1165 瀏覽
添加回答
舉報(bào)