⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

C++17 std::optional:优雅处理可能缺失的值

学习optional的构造、访问和错误处理,替代指针或哨兵值表示可选结果。 · 难度:入门 · +15XP

什么是std::optional?

std::optional是一个容器,它可能包含一个值,也可能为空。它用于表示一个可能失败的函数结果或可选参数,比使用指针或特殊标记更安全。

基本用法

#include <optional>
#include <iostream>
#include <string>

std::optional<std::string> find_user(int id) { if (id == 1) return "Alice"; else return std::nullopt; // 或 {} }

int main() { auto result = find_user(1); if (result) // 或 result.has_value() std::cout << *result << ' '; // 解引用 else std::cout << "Not found "; }

访问值

方法说明
has_value()检查是否包含值
value()返回值或抛出std::bad_optional_access
value_or(default)返回值或默认值
operator* / operator->解引用(未检查)
std::optional<int> opt = 42;
std::cout << opt.value_or(0) << '
';  // 42
opt = std::nullopt;
std::cout << opt.value_or(-1) << '
'; // -1

与错误处理

std::optional适合不需要错误信息的场景。如果需要错误原因,考虑std::expected(C++23)。

练习提示

编写一个函数safe_divide,接受两个double参数,如果除数为0则返回std::nullopt,否则返回商。在main中测试。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 105 篇
0 完成
🔥 0