Namespaces
Variants

voidify

From cppreference.net
Memory management library
voidify
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
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 显式类型转换破坏了常量正确性 移除了这些类型转换

参见

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