std::optional的解释和使用

本文介绍C++17中新增的std::optional模板类,它为处理可能不存在的值提供了一种优雅的方法。文章通过对比传统的错误处理方式(如返回错误码和抛出异常),展示了std::optional如何简化代码并提高程序的可读性和安全性。

std::optional的解释和使用

std::optional是c++ 17版本中新增的一个模板类,可以用于处理错误


将其使用之前,需要明白C++常用的两种处理错误的方式:

1.返回错误码(return -1)

2.抛出异常(try catch,throw…)


在c++17中新增了std::optional,用于替代前两种。因为它如果成功,则打印结果,如果为空,打印报错信息


#include <iostream>
#include <optional>

enum ErrCode
{
    ERR1,
    SUCCESS
};

ErrCode test(int a,int b,int &out) {
    if (b == 0)
    {
        return ErrCode::ERR1;
    }
    out = a / b;
    return ErrCode::SUCCESS;

}

int test2(int a, int b) {
    if (b == 0)
    {
        throw std::overflow_error("div zero");
    }
    
    return  a / b;

}

std::optional<int> test3(int a, int b) {
    std::optional<int> ret = std::nullopt;
    if (b == 0)
    {
        return ret;
    }
    ret = a / b;
    return ret;
}
// 使用例程
int main()
{
    std::optional<int> res= test3(10,2);
    // 如果成功,则打印结果
    if (res) {
        std::cout << *res<< std::endl;
    }
    // 如果为空,打印报错信息
    else {
        std::cout << "err" << std::endl;
    }
}

在这里插入图片描述

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值