跳到主要内容

C++ 命名要求: NullablePointer (C++11 起)

指定类型为可与 std::nullptr_t 对象进行比较的类指针对象。

要求

该类型必须满足以下所有要求:

此外,类型的值初始化对象必须产生该类型的空值。此空值应仅与其自身等效。类型的默认初始化可能具有不确定值。

该类型的对象必须可上下文转换为 bool。如果值等效于其空值,则此转换的效果返回 false,否则返回 true

此类型执行的任何操作都不能抛出异常。

给定两个类型为 pq 的值,以及 npstd::nullptr_t 类型的值(可能带有 const 限定符),该类型必须满足以下附加表达式:

pub表达式效果
pubType p(np);
Type p = np;
此后,p 等效于 nullptr
pubType(np)一个等效于 nullptr 的临时对象
pubp = np必须返回一个 Type&,此后,p 等效于 nullptr
pubp != q必须返回一个可上下文转换为 bool 的值 (C++23 之前)
decltype(p != q) 模拟 boolean-testable (C++23 起)
效果是 !(p == q)
pubp == np
np == p
必须返回一个可上下文转换为 bool 的值 (C++23 之前)
decltype(p == np)decltype(np == n) 都模拟 boolean-testable (C++23 起)
效果是 (p == Type())
pubp != np
np != p
必须返回一个可上下文转换为 bool 的值 (C++23 之前)
decltype(p != np)decltype(np != n) 都模拟 boolean-testable (C++23 起)
效果是 !(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); }
// or only a defaulted operator== (since C++20)
};

标准库

以下类型必须满足 NullablePointer

C++ 命名要求: NullablePointer (C++11 起)

指定类型为可与 std::nullptr_t 对象进行比较的类指针对象。

要求

该类型必须满足以下所有要求:

此外,类型的值初始化对象必须产生该类型的空值。此空值应仅与其自身等效。类型的默认初始化可能具有不确定值。

该类型的对象必须可上下文转换为 bool。如果值等效于其空值,则此转换的效果返回 false,否则返回 true

此类型执行的任何操作都不能抛出异常。

给定两个类型为 pq 的值,以及 npstd::nullptr_t 类型的值(可能带有 const 限定符),该类型必须满足以下附加表达式:

pub表达式效果
pubType p(np);
Type p = np;
此后,p 等效于 nullptr
pubType(np)一个等效于 nullptr 的临时对象
pubp = np必须返回一个 Type&,此后,p 等效于 nullptr
pubp != q必须返回一个可上下文转换为 bool 的值 (C++23 之前)
decltype(p != q) 模拟 boolean-testable (C++23 起)
效果是 !(p == q)
pubp == np
np == p
必须返回一个可上下文转换为 bool 的值 (C++23 之前)
decltype(p == np)decltype(np == n) 都模拟 boolean-testable (C++23 起)
效果是 (p == Type())
pubp != np
np != p
必须返回一个可上下文转换为 bool 的值 (C++23 之前)
decltype(p != np)decltype(np != n) 都模拟 boolean-testable (C++23 起)
效果是 !(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); }
// or only a defaulted operator== (since C++20)
};

标准库

以下类型必须满足 NullablePointer