voidify
来自 zh.cppreference.net
template< class T >
void* /*voidify*/( T& obj ) noexcept;
|
(*仅用于说明*) (自 C++17 起为 constexpr) |
|
返回obj的地址(隐式转换为void*)。
参数
| obj | - | 将要获取其地址的对象 |
返回值
|
& obj |
(C++11 前) |
|
std:: addressof ( obj ) |
(C++11 起) |
注释
这个仅用于阐述的函数模板由P0896R4引入。它用于描述特化 <memory>算法的效果。结果指针用作placement 参数,该参数是placement new表达式的一部分。
最初,返回值是const_cast<void*>(static_cast<const volatile void*>(std::addressof(obj))),这破坏了常量正确性。通过LWG 问题 3870的决议,显式转换已被移除,剩下的唯一转换是到void*的隐式转换。
缺陷报告
下列行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 修正后行为 |
|---|---|---|---|
| LWG 3870 | C++98 | 显式类型转换破坏了常量正确性 | 移除了这些类型转换 |
参阅
(C++20) |
在给定地址创建对象 (函数模板 & 算法函数对象) |
(C++20) |
|
| 将对象范围复制到内存未初始化区域 (函数模板 & 算法函数对象) | |
(C++20) |
|
(C++11) |
将一定数量的对象复制到内存未初始化区域 (函数模板 & 算法函数对象) |
(C++20) |
|
| 将一个对象复制到由范围定义的内存未初始化区域 (函数模板 & 算法函数对象) | |
(C++20) |
|
| 将一个对象复制到由起点和计数定义的内存未初始化区域 (函数模板 & 算法函数对象) | |
(C++20) |
|
(C++17) |
将对象范围移动到内存未初始化区域 (函数模板 & 算法函数对象) |
(C++20) |
|
(C++17) |
将一定数量的对象移动到内存未初始化区域 (函数模板 & 算法函数对象) |
(C++20) |
| 构造对象通过 默认初始化 在由范围定义的内存未初始化区域中 (函数模板 & 算法函数对象) | |
| 构造对象通过 默认初始化 在由起点和计数定义的内存未初始化区域中 (函数模板 & 算法函数对象) | |
| 构造对象通过 值初始化 在由范围定义的内存未初始化区域中 (函数模板 & 算法函数对象) | |
| 构造对象通过 值初始化 在由起点和计数定义的内存未初始化区域中 (函数模板 & 算法函数对象) | |