c++17中的optional

定义:

类模板 std::optional 管理一个可选的容纳值既可以存在也可以不存在的值

在C/C++中,非指针如何表示一个空值举一个例子,一函数用来创建一个类对象,如果它没有成功返回什么?像这种情况的解决办法,一般是搞这个bool值用来看是否执行成功,再来拿取对象;或者搞个魔数1,2,3等等来判断,原理都是一样。更或者,可以采用异常处理的方式,这个在c++里就有些惨不忍睹了。前者代码丑陋,后者是犯不着这么大费周章。

那有没有一个类似于nullptr的东西呢?有,std::nullopt_t ,它是空类类型用于指示 optional 类型拥有未初始化状态。特别是 std::optional 有一个以 nullopt_t 为单参数的构造函数,它创建不含值的 optional 。

std::optional在确定有值的情况并不会分配内存而只是使用存在值的内存注意,它模拟了一个对象而不是一个指针

应用场景:

凡是取对象变量的地方都可以用它来替换,它基本解决了对变量处理空值的问题。
尤其是对于一些库的对外接口不需要再处理空值异常的状态信息,可以在库外调用者直接处理,代码会更简单明了,处理异常更清晰便捷。

总结:

std::optional是一个和类型, 区别于struct所表达的积类型
std::variant 表示要么有(要么是这个,要么是那个),std::optional表示可能有(可能有,也可能没有)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值