C++ std::optional 使用教程

C++ std::optional 使用教程

💡 原文中文,约8600字,阅读约需21分钟。
📝

内容提要

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 处理异常。

➡️

继续阅读