voidify

来自cppreference.com
< cpp‎ | memory
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)(C++20)(C++20)
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
初等字符串转换
(C++17)
(C++17)
 
动态内存管理
未初始化内存算法
受约束的未初始化内存算法
分配器
垃圾收集支持
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)
(C++11)(C++23 前)



 
template< class T >
constexpr void* voidify( T& obj ) noexcept; // 仅用于阐述
(C++20 起)

返回 obj 的(隐式转换到 void* 的)地址。

参数

obj - 要取地址的对象

返回值

std::addressof(obj)

注解

此函数以 P0896R4 引入。它用于描述未初始化内存算法的效果,这些函数在未初始化的内存区域中构造对象。结果指针被用作布置 new 表达式中的布置参数 。

返回值在一开始是 const_cast<void*>(static_cast<const volatile void*>(std::addressof(obj))),它破坏了 const 正确性。LWG 问题 3870 的解决方案移除了这些转型,仅剩的转换是到 void* 的隐式转换。

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 3870 C++20 显式转型破坏了 const 正确性 移除这些转型

参阅

将范围内的对象复制到未初始化的内存区域
(函数模板)
复制一个对象到以范围定义的未初始化内存区域
(函数模板)
移动一个范围的对象到未初始化的内存区域
(函数模板)
在范围所定义的未初始化的内存区域以默认初始化构造对象
(函数模板)
在范围所定义的未初始化内存中用值初始化构造对象
(函数模板)
在给定地址创建对象
(函数模板)