我们在实现数据结构查找操作的时候,如果碰到没有找到的情况,C的风格就是return -1,返回一个sentinel value。这种做法虽然简单,但并不总是可靠。对于某些类型而言,很难找到一个永远不会与正常数据冲突的特殊值。
因此在C++17 引入了std::optional标准库类型,如需使用,则要include <optional>。
std::optional<T> 表示:可能包含一个 T 类型的值,也可能什么都不包含。
Example:std::optional<std::size_t> find(const T& value)

  • 如果查找成功:return i
  • 如果查找成功:return std::nullopt

其中,std::nullopt 表示当前 optional 不包含任何值。
使用时,通常需要先判断是否有值:​

auto result = find(value);
if (result) {
    std::cout << *result;
}

这里的*result,表示获取 optional 内部保存的对象,其作用类似于对指针解引用。