首頁 > 後端開發 > C++ > 何時必須將 Placement-New 與「reinterpret_cast」一起使用來建立簡單的預設可建構物件?

何時必須將 Placement-New 與「reinterpret_cast」一起使用來建立簡單的預設可建構物件?

Susan Sarandon
發布: 2024-12-06 16:14:23
原創
378 人瀏覽過

When Must Placement-New Be Used with `reinterpret_cast` to Create Trivially Default-Constructible Objects?

Reinterpret_cast 和建立普通的預設可建構物件

cppreference 用於聲明reinterpret_cast 可用於建立普通的預設物件的儲存上。然而,此聲明已被更正,指出在這種情況下需要 place-new 來正式引入物件並避免未定義的行為。

物件生命週期何時開始?

考慮到此更正,很明顯,在提供的程式碼中不存在 X 物件。因此,任何存取其成員的嘗試(例如,reinterpret_cast>(buffer)->x = 42;)都會導致未定義的行為。

alignas() 的作用

alignas() 說明符確保儲存適當對齊以容納 X。 它不會建立X物件。 如果alignas()宣告和reinterpret_cast之間存在分支,它不會改變不存在X物件的事實。

C 標準的變化

C 之間對此行為的解釋保持一致 11和C 1z。這兩個標準都不支援透過reinterpret_cast 創建沒有明確建構的物件的概念。

以上是何時必須將 Placement-New 與「reinterpret_cast」一起使用來建立簡單的預設可建構物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板