首页 > 后端开发 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板