为啥 std::optional 对 std::nullopt 类型的操作数有一个特殊的相等运算符
Posted
技术标签:
【中文标题】为啥 std::optional 对 std::nullopt 类型的操作数有一个特殊的相等运算符【英文标题】:Why does std::optional have a special equality operator for operand of the type std::nullopt为什么 std::optional 对 std::nullopt 类型的操作数有一个特殊的相等运算符 【发布时间】:2021-09-22 22:28:24 【问题描述】:类模板std::optional
有转换构造函数
constexpr optional(nullopt_t) noexcept;
那么问题来了,为什么在 C++ 标准中声明了特殊的单一相等运算符
template<class T> constexpr bool operator==(const optional<T>&, nullopt_t) noexcept;
std::nullopt
何时仅用作第二个操作数?
(参见例如 C++ 20 Draft N 4860
// 20.6.7, comparison with nullopt
template<class T> constexpr bool operator==(const optional<T>&, nullopt_t) noexcept;
)
引入这个特殊运算符的原因是什么?
【问题讨论】:
因为miracles. 我不明白你的问题。你对人们想写if (o == std::nullopt)
感到惊讶吗?
@BrianBi 我很惊讶没有运算符模板您正在查看 C++20 草案。不迟于N4820 的草稿具有所有相等运算符。由于 rewritten candidates 的引入,它们后来 [可能] 被删除。
【讨论】:
以上是关于为啥 std::optional 对 std::nullopt 类型的操作数有一个特殊的相等运算符的主要内容,如果未能解决你的问题,请参考以下文章
为啥允许将 std::optional 与值进行比较? [复制]
为啥 std::optional 构造函数使用 std::in_place?
为啥 std::optional::value() &&;返回 &&?
为啥 const rvalue 限定 std::optional::value() 返回 const rvalue 引用?