std::optional的用法 C++17

std::optional 是 C++17 引入的一个模板类,用于表示一个变量可能有值,也可能没有值的情况。它主要用来处理函数可能无法返回有效值的情况,避免使用空指针(nullptr)或者特殊返回值(如 -10)来表示错误或无效状态。

#include <optional>
#include <iostream>

std::optional<int> find_value(bool condition) {
    if (condition) {
        return 42; // 如果条件为真,返回一个有效的 int 值
    } else {
        return std::nullopt; // 否则返回 std::nullopt,表示没有值
    }
}

int main() {
    std::optional<int> result = find_value(true);
    if (result.has_value()) {
        std::cout << "找到的值: " << result.value() << std::endl;
    } else {
        std::cout << "没有找到值" << std::endl;
    }

    return 0;
}

解释:

  1. 定义和初始化

    • std::optional<int> result 定义了一个可能包含 int 类型值的变量 result。它可以包含一个 int,也可以是空的。
    • std::nullopt 是一个特殊的常量,表示 std::optional 没有值。
  2. 检查是否有值

    • 使用 result.has_value() 或者 result 来检查 std::optional 是否包含值。
    • 也可以用 if (result) 来判断是否有值,这样更简洁。
  3. 获取值

    • 如果 std::optional 有值,可以使用 result.value() 获取该值。
    • 也可以用解引用操作符 *result 来获取值。
  4. 默认值

    • 可以用 result.value_or(default_value) 在没有值时返回一个默认值。

优点:

  • 避免使用空指针或特殊值来表示无效状态。
  • 使代码更安全,避免因未正确处理无效值导致的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值