voidify
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
template
<
class
T
>
void * voidify ( T & obj ) noexcept ; |
(
仅用于说明*
)
(自 C++17 起为 constexpr) |
|
返回 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 问题 3870 的解决方案移除了显式转换,唯一保留的转换是到 void * 的隐式转换。
缺陷报告
下列行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 修正后行为 |
|---|---|---|---|
| LWG 3870 | C++98 | 显式类型转换破坏了常量正确性 | 移除了这些类型转换 |
参见
|
将对象范围复制到未初始化的内存区域
(函数模板) |
|
|
(C++20)
|
将对象范围复制到未初始化的内存区域
(算法函数对象) |
|
将对象复制到由范围定义的未初始化内存区域
(函数模板) |
|
|
(C++20)
|
将对象复制到由范围定义的未初始化内存区域
(算法函数对象) |
|
(C++17)
|
将对象范围移动到未初始化的内存区域
(函数模板) |
|
(C++20)
|
将对象范围移动到未初始化的内存区域
(算法函数对象) |
|
(C++17)
|
通过
默认初始化
在由范围定义的未初始化内存区域中构造对象
(函数模板) |
|
通过
默认初始化
在由范围定义的未初始化内存区域中构造对象
(算法函数对象) |
|
|
(C++17)
|
通过
值初始化
在由范围定义的未初始化内存区域中构造对象
(函数模板) |
|
通过
值初始化
在由范围定义的未初始化内存区域中构造对象
(算法函数对象) |
|
|
(C++20)
|
在给定地址创建对象
(函数模板) |
|
(C++20)
|
在给定地址创建对象
(算法函数对象) |