首页 > 解决方案 > 使用 std::optional 作为常规指针与使用 has_value() 和 value

问题描述

std::optional可以使用类似于普通指针的语法访问其值,例如 .

std::optional<string> some_str;
if (some_str)
    (*some_str).c_str();

但它也有两个功能,has_value()提供value()对其值的访问以及检查该值是否存在。

std::optional<string> some_str;
if (some_str.has_value())
    some_str.value().c_str();

我想知道这两者有什么区别是为了?
1. 更冗长
2. 性能?
3. 更好的日志记录和调试?value()会抛出异常。

标签: c++c++17stdoptional

解决方案


这里有两个不同的东西。

首先,explicit operator bool() constbool has_value() const. 这些正是同义词。它们的意思完全相同。使用您喜欢的任何一个。

其次,T& value()T& operator*(). 这与vector::atvs.vector::operator[]相同。前者没有先决条件 - 它检查并抛出 - 后者有先决条件 - 如果禁用可选项,则它是未定义的行为。


推荐阅读