std::out_ptr_t<Smart,Pointer,Args...>:: operator Pointer*, std::out_ptr_t<Smart,Pointer,Args...>:: operator void**
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
out_ptr_t::operator Pointer*
out_ptr_t::operator void**
|
||||
| Non-member functions | ||||
|
operator Pointer
*
(
)
const
noexcept
;
|
(1) | (自 C++23 起) |
|
operator
void
**
(
)
const
noexcept
;
|
(2) | (自 C++23 起) |
将
Pointer
或
void
*
对象的地址暴露给外部函数,该函数通常会重新初始化该地址。
Pointer
对象的地址。
Pointer
与
void
*
类型不同时参与重载决议,且当
Pointer
不是指针类型时程序非良构。
void * 对象的初始值等于存储的
Pointer
对象转换为
void
*
后的值,对其进行的任何修改都会影响
析构函数
中使用的
Pointer
值。在
*
this
生命周期之外访问
void
*
对象将导致未定义行为。
一旦在
out_ptr_t
对象上调用了这两个转换函数之一,就不应再对其调用另一个函数,否则将导致未定义行为。
目录 |
参数
(无)
返回值
Pointer
对象的地址。
注释
如果返回值所指向的对象未被重写,则其等于 nullptr 。
在常见实现中,每个作为指针类型的
Pointer
的对象表示与
void
*
的对象表示兼容,因此这些实现通常将
void
*
对象存储在
Pointer
对象的存储空间内,无需额外存储:
- 如果实现启用了基于类型的别名分析(依赖于 严格别名规则 ),则可以使用正确对齐的 std:: byte [ sizeof ( void * ) ] 成员子对象,且两个转换函数都返回数组内 隐式创建 的对象的地址。
-
否则,可以使用
Pointer成员子对象来实现两个转换函数,且 (2) 可以直接将其地址通过 reinterpret_cast 转换为 void ** 后返回。
如果
Pointer
是指针类型,其对象表示与
void
*
不兼容,则可能需要额外的
bool
标志来记录是否已调用
(1)
(或
(2)
)。
示例
|
本节内容不完整
原因:缺少示例 |