内容提要
C++ 17引入了std::optional,它表示一个可能有值也可能没有值的对象。它可以用于简化代码和处理值可能存在或不存在的情况。std::optional可以使用std::nullopt或{}进行构造,可以使用emplace或std::make_optional插入值。可以使用.value()或*运算符访问值。可以使用has_value或与std::nullopt进行比较来检查值的存在。如果值不存在,可以使用value_or设置默认值。如果在没有值的情况下调用.value(),它将抛出std::bad_optional_access异常。
关键要点
-
C++ 17 引入了 std::optional,表示一个可能有值的对象。
-
std::optional 可以使用 std::nullopt 或 {} 进行构造。
-
可以使用 emplace 或 std::make_optional 插入值。
-
使用 .value() 或 * 运算符访问值。
-
可以使用 has_value 或与 std::nullopt 比较来检查值的存在。
-
如果值不存在,使用 value_or 设置默认值。
-
调用 .value() 在没有值的情况下会抛出 std::bad_optional_access 异常。
-
std::optional 的作用类似于 Python 中的 None。
-
引入 std::optional 是为了解决 C++ 中缺少 None 的问题。
-
使用 std::optional 可以简化返回值的处理,避免使用不直观的返回值。
-
判断 std::optional 是否有值可以使用 has_value 函数或直接用 if 语句。
-
获取 std::optional 的值可以使用 .value() 或 * 运算符。
-
使用 value_or 可以在值不存在时提供默认值。
-
在没有值的情况下调用 .value() 会导致运行时错误,建议使用 try-catch 处理异常。