

新闻资讯
技术学院std::optional用于明确表示值可能存在或不存在,适用于查找失败、解析异常、配置未设等场景,提供安全的空值处理机制。
std::optional 是 C++17 引入的工具,用来明确表示一个值“可能存在,也可能不存在”,替代裸指针、特殊哨兵值(如 -1、nullptr)或自定义包装类,让意图更清晰、代码更安全。
当你需要表达“这个函数可能成功返回结果,也可能无法计算出有效值”时,就适合用它。比如:
素,但该元素未必存在(避免返回迭代器或指针带来的解引用风险)声明一个可能为空的 int:
std::optional
maybe_value = 42; // 赋值后有值
if (maybe_value) { ... } // 布尔上下文判断是否含值(推荐)
if (maybe_value.has_value()) { ... } // 等价写法,语义更显式
int x = *maybe_value; // 解引用获取值(运行时若为空会调用 std::terminate)
int y = maybe_value.value(); // 同上,但可自定义异常(value_or 提供安全兜底)
int z = maybe_value.value_or(0); // 有值则取值,否则返回 0
写一个安全的字符串转整数函数:
std::optional
char* end;
long val = std::strtol(s.c_str(), &end, 10);
if (*end == '\0' && s.size() > 0) {
return static_cast
} else {
return std::nullopt; // 显式返回空状态
}
}
调用时自然表达分支逻辑:
auto result = try_parse_int("123");
if (result) {
std::cout
} else {
std::cout
}