推荐答案
-- -------------------- ---- ------- -------- ---------- -------- ---------- ------------------ ---------- -- --- -- - -- -- -- -- - ------ ------------- -- ---- - ------ - - -- -- ------ - --- ------ - ---- ------ - ---------- --- -- -------------------- - --------- -- -------- - -- -------------- -- ---------- - ---- - --------- -- --------- -- ------ -- ---------- - ------ - ---------- --- -- -------- - --------- -- -------- - -- ------- -- ---------- - ---- - --------- -- --------- -- ------ -- ---------- - ------ -- -
本题详细解读
std::optional 简介
std::optional
是 C++17 引入的一个模板类,用于表示一个可能包含值或可能不包含值的对象。它通常用于函数返回值,表示函数可能返回一个有效值,也可能返回一个无效值(即空值)。
主要用法
创建 std::optional 对象:
- 可以通过直接赋值或使用
std::make_optional
来创建std::optional
对象。 - 例如:
std::optional<int> opt = 42;
或auto opt = std::make_optional(42);
- 可以通过直接赋值或使用
检查是否有值:
- 使用
has_value()
或直接使用if (opt)
来检查std::optional
是否包含有效值。 - 例如:
if (opt.has_value()) { /* 有值 */ }
或if (opt) { /* 有值 */ }
- 使用
获取值:
- 使用
value()
方法或解引用操作符*
来获取std::optional
中的值。 - 例如:
int val = opt.value();
或int val = *opt;
- 使用
返回空值:
- 使用
std::nullopt
来表示std::optional
不包含任何值。 - 例如:
return std::nullopt;
- 使用
示例代码解析
divide
函数返回一个std::optional<int>
,表示除法运算的结果。如果除数为零,则返回std::nullopt
,表示无效值。- 在
main
函数中,首先调用divide(10, 2)
,返回一个包含有效值的std::optional
,然后通过has_value()
和value()
方法获取并输出结果。 - 接着调用
divide(10, 0)
,返回一个空值std::nullopt
,通过if (result)
检查并输出错误信息。
注意事项
- 使用
value()
方法时,如果std::optional
为空,会抛出std::bad_optional_access
异常。因此,在使用value()
之前,最好先检查has_value()
。 std::optional
可以用于任何类型的对象,包括自定义类型和标准库类型。