主要应用场景
- 函数可能返回无效值的情况:当一个函数并非总是能够返回有效的结果时,使用
std::optional
可以清晰地表明这一点,而不是通过返回特殊值(如 -1 表示错误等)来暗示无效。
- 避免空指针异常:在处理可能为空的对象指针时,
std::optional
提供了一种更安全的替代方案,避免了在解引用指针时可能出现的空指针异常。
- 优化内存使用:对于一些可能不经常使用的对象,
std::optional
可以延迟对象的创建,只有在真正需要时才分配内存。
代码示例
#include <iostream>
#include <optional>
// 函数可能返回有效的整数,也可能返回无效值
std::optional<int> divide(int a, int b) {
if (b == 0) {
return std::nullopt; // 返回无效值
}
return a / b;
}
int main() {
auto result1 = divide(10, 2);
if (result1.has_value()) {
std::cout << "10 / 2 = " << result1.value() << std::endl;
} else {
std::cout << "Division by zero." << std::endl;
}
auto result2 = divide(5, 0);
if (result2.has_value()) {
std::cout << "5 / 0 = " << result2.value() << std::endl;
} else {
std::cout << "Division by zero." << std::endl;
}
return 0;
}