C++ named requirements: NullablePointer (since C++11)
指定该类型为指针类对象,可与 std::nullptr_t 对象进行比较。
目录 |
要求
该类型必须满足以下所有要求:
此外,该类型的值初始化对象必须生成该类型的空值。此空值应仅与自身等效。该类型的默认初始化可能具有 不确定 或错误 (since C++26) 值。
该类型的值必须能够 上下文转换 为 bool 。此转换的效果是:当值等于其空值时返回 false ,否则返回 true 。
该类型执行的所有操作均不得抛出异常。
该类型必须满足以下附加表达式,给定两个该类型的值 p 和 q ,且 np 是 std::nullptr_t 类型的值(可能带有 const 限定):
| 声明 | 效果 | ||||
|
Type p
(
np
)
;
Type p = np ; |
此后, p 等价于 nullptr | ||||
| 表达式 | 效果 | ||||
| Type ( np ) | 等价于 nullptr 的临时对象 | ||||
| p = np |
必须返回
Type&
,且此后
p
等价于
nullptr
|
||||
| p ! = q |
效果为 ! ( p == q ) |
||||
|
p
==
np
np == p |
效果为 ( p == Type ( ) ) |
||||
|
p
!
=
np
np ! = p |
效果为 ! ( p == np ) |
注释
请注意,对于 NullablePointer 类型,解引用操作( operator * 或 operator - > )并非必需。满足这些要求的最小化类型是
class handle { int id = 0; public: handle() = default; handle(std::nullptr_t) {} explicit operator bool() const { return id != 0; } friend bool operator==(handle l, handle r) { return l.id == r.id; } friend bool operator!=(handle l, handle r) { return !(l == r); } // 或仅使用默认的 operator==(自 C++20 起) };
标准库
以下类型满足 NullablePointer 要求:
以下类型必须满足 NullablePointer 要求才能与标准库组件进行交互:
-
每个
Allocator
类型
X的成员类型X::pointer、X::const_pointer、X::void_pointer和X::const_void_pointer。 -
std::unique_ptr
的成员类型
pointer。
|
(since C++23) |
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
|
LWG 2114
( P2167R3 ) |
C++11 | 上下文转换为 bool 的要求过于宽松,未能反映实现方案的预期 | 强化了相关要求 |