c++17 optional 简介
c++17 的optional 作为返回值,提高异常的处理
对于构造可能失败的对象,似乎在构造函数里抛异常不太合适。所以
首先是使用静态方法来返回对象,在外部申请资源后,再通过传参给构造函数。
这样的好处,通过配合optional 可以很好解决异常。
#include <iostream>
#include <string>
#include <optional>
using namespace std;
class foo{
public:
foo(int i):m_i(i){}
static optional<foo> make(int arg, std::error_code &ec){
if(arg == 1){
return foo(arg);
}else{
return {};
}
}
int m_i;
};
int main(){
std::error_code ec;
auto f1 = foo::make(1,ec);
if(f1){
cout << "f1";
}
auto f2 = foo::make(2,ec);
if(f2){
cout <<"f2";
}
return 0;
}
optional 的缺点
optional 对返回值包装一层, 也就失去了灵活性
template < class U = value_type > constexpr optional( U&& value );
c++17 optional 简介的更多相关文章
- Guava源码学习(一)Optional
基于版本:Guava 22.0 Wiki:Using and avoiding null 0:Optional简介 null在很多场景下会引发问题,NullPointerException困扰过无数的 ...
- C++17尝鲜
https://cloud.tencent.com/developer/article/1351910 [译]C++17,optional, any, 和 variant 的更多细节 用户261520 ...
- Monad新解-FRP对比——ReactiveCocoa、RxSwift、Bacon以及背后的Functional
ReactiveX Rx的Observable的本质就是一个Event Monad,即上下文(就是图文教程中包裹的盒子)为Event的一个Monad,这里的Event定义,可以对应语言的struct或 ...
- 【Caffe】源码解析----caffe.proto (转载)
分析caffe源码,看首先看caffe.proto,是明智的选择.好吧,我不是创造者,只是搬运工. 原文地址:http://blog.csdn.net/qq_16055159/article/deta ...
- Arduino-1602-LiquidCrystal库
前言:LiquidCrystal是一个1602的IIC库,使用IIC协议可以极大节约用线数量,十分方便.当然,前提是1602要使用LCD1602 I2C模块. 一.库函数快速查询 LiquidCrys ...
- Java8中的流操作-基本使用&性能测试
为获得更好的阅读体验,请访问原文:传送门 一.流(Stream)简介 流是 Java8 中 API 的新成员,它允许你以声明式的方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现).这有点儿 ...
- Spring中文文档
前一段时间翻译了Jetty的一部分文档,感觉对阅读英文没有大的提高(*^-^*),毕竟Jetty的受众面还是比较小的,而且翻译过程中发现Jetty的文档写的不是很好,所以呢翻译的兴趣慢慢就不大了,只能 ...
- Node.js(2)-protobuf zeromq gzip
1.Node.Js环境准备 在win8 + vs.net 2012 环境下调试了很长时间没搞定安装编译问题,重装系统测试了2套环境,解决了编译问题: 1)Win8.1 + vs.net 2013 2) ...
- Java面试宝典(2018版)
置顶 2018年11月10日 23:49:18 我要取一个响亮的昵称 阅读数:8893 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chen ...
随机推荐
- 由于找不到msvcp100.dll无法继续执行代码
最近重装系统之后安装mysql, 执行 mysqld install 命令时出现 : 由于找不到msvcp100.dll无法继续执行代码... 解决办法 下载 Microsoft Visual C++ ...
- JS页面校验
结构: 1.导入正则表达式校验包:https://blog.csdn.net/weixin_44718300/article/details/88726653 2.页面校验.HTML <!DOC ...
- Java web项目所需技术*(大概)
实施java 的web项目需要掌握的技术如下: 1.java语言 2. 面向对象分析设计 XML 语言 网页脚本语言 数据库 应用服务器 集成开发环境 .java语言:JSP.Servlet.JDB ...
- Tensorflow学习教程------softmax简单介绍
做机器学习的同志们应该对这个都不陌生,这里简单举个例子.一般来说,使用softmax函数来将神经元输出的数值映射到0到1之间,这样神经元输出的值就变为了一个概率值. 公式和例子如下图 公式和例子如下图
- 合并排序_python
#!/usr/bin/python # --coding:utf-8 -- def sort_merge(left,right): i,j=0,0 result=[] while i<len(l ...
- 字符串处理 - ANSI - Unicode - UTF8 转换
#include <stdio.h> #include <windows.h> #include <locale.h> #define BUFF_SIZE 1024 ...
- 18 12 29 css background
background属性 属性解释 background属性是css中应用比较多,且比较重要的一个属性,它是负责给盒子设置背景图片和背景颜色的,background是一个复合属性,它可以分解成如下几个 ...
- jq切换选择项
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- xhell ctrl+s 假死
如题. ctrl+q 即可接触 假死状态. 记录下
- php封装一个接口类
<?phpClass Response{//返回数据 public static function show($code,$message='',$data='',$type = 'json', ...