zoukankan      html  css  js  c++  java
  • 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 );
    
  • 相关阅读:
    windows权限维持之注册表
    mstsc痕迹清理
    内网常用爆破手法
    RDP攻击&防御
    Java SPI 机制
    mysqldump 数据库备份
    Redis分布式锁
    Seata分布式事务中间件学习和实践
    pytube
    idea github登录
  • 原文地址:https://www.cnblogs.com/hustcpp/p/11364375.html
Copyright © 2011-2022 走看看