Namespaces
Variants

voidify

来自 zh.cppreference.net
 
 
算法库
受约束算法和范围上的算法 (C++20)
受约束算法,例如ranges::copy、ranges::sort,...
排序和相关操作
划分操作
(C++11)    

排序操作
二分搜索操作
(在划分的范围上)
集合操作(在已排序范围上)
合并操作(在已排序范围上)
堆操作
最小/最大操作
(C++11)
(C++17)
字典序比较操作
排列操作


 
 
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 显式类型转换破坏了常量正确性 移除了这些类型转换

参阅

在给定地址创建对象
(函数模板 & 算法函数对象)
将对象范围复制到内存未初始化区域
(函数模板 & 算法函数对象)
将一定数量的对象复制到内存未初始化区域
(函数模板 & 算法函数对象)
将一个对象复制到由范围定义的内存未初始化区域
(函数模板 & 算法函数对象)
将一个对象复制到由起点和计数定义的内存未初始化区域
(函数模板 & 算法函数对象)
将对象范围移动到内存未初始化区域
(函数模板 & 算法函数对象)
将一定数量的对象移动到内存未初始化区域
(函数模板 & 算法函数对象)
构造对象通过 默认初始化 在由范围定义的内存未初始化区域中
(函数模板 & 算法函数对象)
构造对象通过 默认初始化 在由起点和计数定义的内存未初始化区域中
(函数模板 & 算法函数对象)
构造对象通过 值初始化 在由范围定义的内存未初始化区域中
(函数模板 & 算法函数对象)
构造对象通过 值初始化 在由起点和计数定义的内存未初始化区域中
(函数模板 & 算法函数对象)