optional

std::optional

<optional>中定义的std::optional保留特定类型的值,或者不包含任何值。c++17引入,如果编译报错,需要加上-std=c++17选项

如果想要允许值是可以选择的,则可以将optional用于函数的参数。如果函数可能返回也可能不返回某些内容,则通常也将optional用作函数的返回类型。这消除了从函数中返回"特殊"值的需求,例如:nullptrend()-1EOF之类的。它还消除了将函数编写为返回代表成功或失败的布尔值的需求,同时将函数的实际结果存储在作为输出参数传递给函数的实参中。

optional是一个类模板,因此必须在<>中指定所需要的类型。如optional<int>

用法示例:

optional<int> getData(bool val)
{
    if (val)
    {
        return 99;
    }
    return nullopt; // c++17引入,空类型,等价于return {}
}

int main()
{
    optional<int> data1{getData(true)};
    optional<int> data2{getData(false)};

    // 判断返回的data是否有值,1表示有值,0没值
    cout << "data1 has_value = " << data1.has_value() << endl;
    if (data2)
    {
        cout << "data2 has a value" << endl;
    }
    // 要是有值可以使用value()或者解引用运算符访问。
    cout << "data1.has_value = " << data1.value() << endl;
    cout << "data1.value = " << *data1 << endl;

    // 还可以使用value_or()来返回optional的值,如果optional为空,则返回指定的值
    cout << "data2.value =  " << data2.value_or(7) << endl;
    return 0;
}

输出结果:

data1 has_value = 1
data1.has_value = 99
data1.value = 99
data2.value =  7

注意:如果对于一个空的optional使用value(),就会抛出std::bad_optional_access异常。同时不能将引用保存在optional中,所以optional<T&>是无效的,但是,可以将指针保存在optional中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值