推荐答案
// www.javascriptcn.com code example
#include <iostream>
#include <optional>
std::optional<int> divide(int a, int b) {
if (b == 0) {
return std::nullopt; // 返回空值
}
return a / b; // 返回计算结果
}
int main() {
auto result = divide(10, 2);
if (result.has_value()) {
std::cout << "Result: " << result.value() << std::endl;
} else {
std::cout << "Division by zero!" << std::endl;
}
result = divide(10, 0);
if (result) {
std::cout << "Result: " << *result << std::endl;
} else {
std::cout << "Division by zero!" << std::endl;
}
return 0;
}本题详细解读
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可以用于任何类型的对象,包括自定义类型和标准库类型。