如何检查<experimental / optional>是否具有值?

时间:2019-12-30 22:59:08

标签: c++ c++17 optional stdoptional

到目前为止,我仅找到一种解决方案:捕获异常,optional.value()引发。但是,当代码处于内部循环中时,C / C ++异常非常慢。

这个问题严格来说是关于<experimental/optional>(即std::experimental::optional),因为Clang没有<optional>。因此,请避免使用通常的“您不应使用A,而应使用B”来节省时间。

编辑: Mat提到有一个布尔运算符,而不是has_value

1 个答案:

答案 0 :(得分:3)

  

这个问题严格来说是关于<experimental/optional>(即std::experimental::optional),因为Clang没有<optional>

libc ++自版本4.0.0(已于2017年3月13日发布)以来已包含<optional>,该版本(及所有后续版本)已包含这两个:

constexpr bool has_value() const noexcept;

constexpr explicit operator bool() const noexcept { return has_value(); }

附录: experimental::optional没有has_value,因为指定的TS(图书馆基础知识V2)不包含该TS-仅operator bool