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

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

在將void *轉換為任何內容時,我應該使用static_cast還是reinterpret

在將void *轉換為任何內容時,我應該使用static_cast還是reinterpret

C++
神不在的星期二 2019-07-26 15:27:56
在將void *轉換為任何內容時,我應該使用static_cast還是reinterpret_caststatic_cast和reinterpret_cast似乎都可以很好地將void *轉換為另一個指針類型。是否有充分理由支持其他人?
查看完整描述

3 回答

?
搖曳的薔薇

TA貢獻1793條經驗 獲得超6個贊

使用static_cast:它是最精確的演員,它準確地描述了在這里進行的轉換。

有一種誤解,認為使用reinterpret_cast是一種更好的匹配,因為它意味著“完全忽略類型安全,只是從A轉換為B”。

但是,這實際上并沒有描述a的效果reinterpret_cast。相反,reinterpret_cast它具有許多含義,因為所有這些含義都表明“由reinterpret_cast執行定義執行的映射?!盵5.2.10.3]

但是在特定情況下,從映射void*T*映射完全由標準定義; 即,在不改變其地址的情況下為無類型指針分配類型。

這是一個偏好的理由static_cast。

此外,并且可以說更重要的是,每次使用reinterpret_cast都是徹頭徹尾的危險,因為它將任何東西轉換為其他任何東西(指針),同時static_cast限制性更強,從而提供更好的保護。這已經讓我免于我偶然試圖將一個指針類型強制轉換為另一個指針類型的錯誤。


查看完整回答
反對 回復 2019-07-26
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

這是一個棘手的問題。一方面,Konrad對reinterpret_cast的規范定義提出了一個很好的觀點,盡管在實踐中它可能做同樣的事情。另一方面,如果你在指針類型之間進行轉換(例如,當通過char *在內存中索引時相當常見),static_cast將生成編譯器錯誤,并且無論如何你將被迫使用reinterpret_cast。

在實踐中我使用reinterpret_cast,因為它更能描述強制轉換操作的意圖。您當然可以為不同的運算符設置一個僅指定指針重新解釋的情況(保證返回相同的地址),但標準中沒有一個。


查看完整回答
反對 回復 2019-07-26
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

我建議總是使用最弱的演員。

reinterpret_cast可用于將指針強制轉換為float。演員陣容的結構越多,使用它就越需要關注。

在這種情況下char*,我會使用c風格的演員,直到我們有一些reinterpret_pointer_cast,因為它更弱,沒有別的就足夠了。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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