c++ - 为什么允许 std::optional 与值进行比较?

标签 c++ c++17 stdoptional

<分区>

能够比较 a std::optional<T> 是否相等是非常有用的与 T :

std::optional<int> opt_value;
int value = 123;

opt_value == value; // will always be 'false'

我认为这种情况下的行为定义明确且清晰。

我不明白为什么允许这样做:

opt_value < value; // this will always be 'true'

我原以为这甚至无法编译。 我认为这里发生的事情非常模糊。 为什么将其添加到 STL 中?

最佳答案

简答:map<optional<int>, int>
您希望能够使用 optional<T>作为map键时 T可用作 key 。将 empty 状态定义为小于或大于正常值使其表现良好。

与此同时,比较普通的 T针对 optional<T>从逻辑上讲,应该只升级裸机 Toptional<T>持有那个值(value)。所以,提供一个重载的形式,它采用一个空的 T只是一个优化,应该有相同的结果。

关于c++ - 为什么允许 std::optional 与值进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67320956/

相关文章:

c++ - std::string 到 std::bitset 由 std::string 表示,反之亦然

c++ - Eigen 乘法断言失败

c++ - 在编译时使用 C++17 可变模板遍历树

c++ - constexpr std::optional 重置

c++ - 插件代码中的公共(public)基类

c++ - 优化 Alpha 混合

c++ - 判断是否过了 5 秒

c++ - 是否有必须使用 `is_detected_v` 的典型用例?

c++ - 为什么当 T 包含 `std::optional<T>::operator=` 数据成员时删除 `const`?

c++ - 将一个 std::optional 转换为另一个 std::optional