命名空间
变体
操作

voidify

来自 cppreference.cn
< cpp‎ | memory
 
 
内存管理库
voidify
(仅为说明目的*)
未初始化内存算法
(C++17)
(C++17)
(C++17)
受约束的未初始化
内存算法
C 库

分配器
内存资源
垃圾回收支持
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
(C++11)(直到 C++23)
未初始化存储
(直到 C++20*)
(直到 C++20*)
显式生命周期管理
 
template< class T >
void* voidify( T& obj ) noexcept;
(仅为说明目的*)
(constexpr since C++17)

返回 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 issue 3870 的决议移除,唯一剩下的转换是隐式转换为 void*

[编辑] 缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

DR 应用于 已发布行为 正确行为
LWG 3870 C++98 显式转换破坏了常量正确性 移除了这些转换

[编辑] 参见

将对象范围复制到未初始化的内存区域
(函数模板) [编辑]
将对象范围复制到未初始化的内存区域
(算法函数对象)[编辑]
将对象复制到由范围定义的未初始化内存区域
(函数模板) [编辑]
将对象复制到由范围定义的未初始化内存区域
(算法函数对象)[编辑]
将对象范围移动到未初始化的内存区域
(函数模板) [编辑]
将对象范围移动到未初始化的内存区域
(算法函数对象)[编辑]
通过 默认初始化 在由范围定义的未初始化内存区域中构造对象
(函数模板) [编辑]
通过 默认初始化 在由范围定义的未初始化内存区域中构造对象
(算法函数对象)[编辑]
通过 值初始化 在由范围定义的未初始化内存区域中构造对象
(函数模板) [编辑]
通过 值初始化 在由范围定义的未初始化内存区域中构造对象
(算法函数对象)[编辑]
在给定地址创建对象
(函数模板) [编辑]
在给定地址创建对象
(算法函数对象)[编辑]