首页 > 编程笔记 > C++笔记 阅读:26

C++ std::optional的用法(附带实例)

在传统的 C++ 编程中,我们常常使用指针、特殊返回值或者额外的状态检查来表示某个值的缺失(如使用 NULL 或 -1)。然而,这些方法要么不安全(如裸指针),要么不直观(如特殊值),也不具有类型安全性。

std::optional 通过封装一个可选的值和一个布尔类型的状态标志来解决这一问题,使得代码更加清晰且易于维护。

C++ optional的基础用法

std::optional<T> 是一个模板类型,内部存储一个类型为 T 的值,这个类型提供了丰富的接口。
此外,std::optional 还支持 operator*operator-> ,用于直接访问存储的值(前提是存在这个值),这使得它的使用更加直观和方便。
#include <optional>
#include <iostream>
std::optional<int> get_even_number(int num) {
    if (num % 2 == 0) return num;
    return std::nullopt; // 返回一个空的 std::optional 对象
}
int main() {
    auto result = get_even_number(3);
    if (result.has_value()) {
        std::cout << "Even number: " << result.value() << '\n';
    } else {
        std::cout << "No even number provided.\n";
    }
}
在这个示例中,get_even_number() 函数尝试返回一个偶数。如果输入的数是偶数,它就返回该数并封装在 std::optional 中;如果不是,就返回 std::nullopt,表示没有值。这使得函数的调用者可以明确知道何时没有有效的返回值,避免使用魔术数字或裸指针的风险。

相关文章