voidify
来自 cppreference.cn
template< class T > void* voidify( T& obj ) noexcept; |
(仅为说明目的*) (constexpr since C++17) |
|
返回 obj 的地址(隐式转换为 void*)。
目录 |
[编辑] 参数
obj | - | 将要获取地址的对象 |
[编辑] 返回值
&obj |
(直到 C++11) |
std::addressof(obj) |
(自 C++11 起) |
[编辑] 注解
此仅为说明目的的函数由 P0896R4 引入。它用于描述 未初始化内存算法 的效果,这些算法在未初始化的内存区域中构造对象。结果指针用作 放置 new 表达式的 placement-params。
最初,返回值是 const_cast<void*>(static_cast<const volatile void*>(std::addressof(obj))),这破坏了常量正确性。显式转换已通过 LWG issue 3870 的决议移除,唯一剩下的转换是隐式转换为 void*。
[编辑] 缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 3870 | C++98 | 显式转换破坏了常量正确性 | 移除了这些转换 |
[编辑] 参见
将对象范围复制到未初始化的内存区域 (函数模板) | |
(C++20) |
将对象范围复制到未初始化的内存区域 (算法函数对象) |
将对象复制到由范围定义的未初始化内存区域 (函数模板) | |
(C++20) |
将对象复制到由范围定义的未初始化内存区域 (算法函数对象) |
(C++17) |
将对象范围移动到未初始化的内存区域 (函数模板) |
(C++20) |
将对象范围移动到未初始化的内存区域 (算法函数对象) |
通过 默认初始化 在由范围定义的未初始化内存区域中构造对象 (函数模板) | |
通过 默认初始化 在由范围定义的未初始化内存区域中构造对象 (算法函数对象) | |
通过 值初始化 在由范围定义的未初始化内存区域中构造对象 (函数模板) | |
通过 值初始化 在由范围定义的未初始化内存区域中构造对象 (算法函数对象) | |
(C++20) |
在给定地址创建对象 (函数模板) |
(C++20) |
在给定地址创建对象 (算法函数对象) |