voidify
来自cppreference.com
template< class T > void* voidify( T& obj ) noexcept; |
(仅用于阐述*) (C++17 起为 constexpr ) |
|
返回 obj 的(隐式转换到 void* 的)地址。
目录 |
[编辑] 参数
obj | - | 要取地址的对象 |
[编辑] 返回值
&obj |
(C++11 前) |
std::addressof(obj) |
(C++11 起) |
[编辑] 注解
这个仅用于阐述的函数由 P0896R4 引入。它用于描述未初始化内存算法的效果,这些函数在未初始化的内存区域中构造对象。结果指针被用作布置 new 表达式中的布置参数 。
返回值在一开始是 const_cast<void*>(static_cast<const volatile void*>(std::addressof(obj))),它破坏了 const 正确性。LWG 问题 3870 的解决方案移除了这些显式转型,只剩下到 void* 的隐式转换。
[编辑] 缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3870 | C++20 | 显式转换破坏了 const 正确性 | 移除这些转换 |
[编辑] 参阅
复制范围中对象到未初始化内存 (函数模板) | |
(C++20) |
复制范围中对象到未初始化内存 (算法函数对象) |
复制一个对象到范围所定义的未初始化内存 (函数模板) | |
(C++20) |
复制一个对象到范围所定义的未初始化内存 (算法函数对象) |
(C++17) |
移动范围中对象到未初始化内存 (函数模板) |
(C++20) |
移动范围中对象到未初始化内存 (算法函数对象) |
在范围所定义的未初始化内存中用默认初始化构造对象 (函数模板) | |
在范围所定义的未初始化内存中用默认初始化构造对象 (算法函数对象) | |
在范围所定义的未初始化内存中用值初始化构造对象 (函数模板) | |
在范围所定义的未初始化内存中用值初始化构造对象 (算法函数对象) | |
(C++20) |
在给定地址创建对象 (函数模板) |
(C++20) |
在给定地址创建对象 (算法函数对象) |