当前位置: 首页 > news >正文

app在线开发网站建设沧州百度推广公司

app在线开发网站建设,沧州百度推广公司,中小企业网络营销方案,html精美登录界面源码std::optional<T>是 C17 中的一个标准库组件&#xff0c;optional <T>对象默认是空的&#xff0c;也就是处于无效状态&#xff0c;给它赋值后因为里面有了元素&#xff0c;就变成了有效状态。 1.引入背景 c函数常用返回值表示函数是否执行成功。如返回nullptr表示…

   std::optional<T>是 C++17 中的一个标准库组件,optional <T>对象默认是空的,也就是处于无效状态,给它赋值后因为里面有了元素,就变成了有效状态。

1.引入背景

        c++函数常用返回值表示函数是否执行成功。如返回nullptr表示执行失败,反之则执行成功。或者返回-1表示执行失败,0表示执行成功。此时,如果函数在执行成功时,还需要传出执行结果,则只能使用函数的传出参数。

        我们需要有一种简单的概念,它能够将执行是否成功的标记与执行结果统一起来,这就是模板类 optional。

2.创建对象

        std::optional<T> 包含一个值时,它的行为就像一个普通的容器,可以访问和修改这个值。当它为空时,任何试图访问值的操作都会失败,通常是通过抛出一个异常或返回一个错误值。
        下面例子中,初始化optional<int>对象后,使用函数 has_value()检查是否包含值,使用函数value() 访问包含的值。

#include <iostream>
#include <optional>
using namespace std;
int main()
{optional<int> op1;               // 默认是无效值if (op1.has_value()){          cout << "op1 value = " << op1.value() << endl;}  optional<int> op2 = 10;                        // 赋值,持有有效值       if (op2.has_value()){          cout << "op2 value = " << op2.value() << endl;}    
}

   运行结果:

op2 value = 10

        optional也能够转换为 bool 值,可以用 */-> 来直接访问内部的值,行为表现很像指针。 

#include <iostream>
#include <string>
#include <optional>
using namespace std;
int main()
{optional<string> op {"c++ shell"};  if (op)                                  //可以转为bool值{          cout << "op value = " << *op << endl; // 使用*/->访问内部的值}    
}

  运行结果:

op value = c++ shell

  3.工厂函数  

        optional 也可以用工厂函数 make_optional() 来创建,不过与直接构造不同,即使不提供初始化参数,它也必定会用“零值”创建出一个有效值的 optional 对象,这一点我们在用的时候要特别注意。

#include <iostream>
#include <vector>
#include <optional>
using namespace std;
int main()
{auto op1 = make_optional<int>();    // 使用默认值构造有效值if (op1.has_value())                                 {          cout << "op1 value = " << op1.value() << endl; }  auto op2 = make_optional<std::vector<double>>();    // 使用默认值构造有效值if (op2.has_value())                              {          cout << "op2 size = " << op2->size() << endl; } }

   运行结果:

op1 value = 0
op2 size = 0

4.应用示例

        实现一个求平方根的函数。

#include <iostream>
#include <optional>
using namespace std;optional<double> safesqrt(double x)
{optional<double> v;        if (x < 0) {            return v;           }v  = ::sqrt(x);         return v;            
}int main()
{optional<double> v1 =  safesqrt(-1);if (v1.has_value())                                 {          cout << "v1 value = " << v1.value() << endl; }  optional<double> v2 =  safesqrt(3);if (v2.has_value())                              {          cout << "v2 size = " << v2.value() << endl; } 
};

运行结果

v2 size = 1.73205

http://www.zhongyajixie.com/news/66147.html

相关文章:

  • 路由器映射做网站稳定吗国家培训网官网
  • wordpress 编辑器标签seo外包服务公司
  • 做网站的颜色搭配长沙网站seo源头厂家
  • 网站名称在哪里注册百度站长平台有哪些功能
  • wordpress后台为什么这么慢网络seo优化推广
  • 建设工程鲁班奖公示网站网页设计
  • 手机制作网页链接的软件云南seo
  • 龙岗在线网站建设关键词在线听
  • 企业画册设计公司做抖音seo排名软件是否合法
  • 罗田网站建设优化网站的意思
  • 西宁网站建设报价贴心君博b网络营销促销策略有哪些
  • wordpress+游戏网站班级优化大师免费下载安装
  • 做收费视频网站深圳sem竞价托管
  • 网站建设项目说明书模板谷歌浏览器下载安装2022最新版
  • 成品网站 智能建站长春网站推广公司
  • 网站命名规范海口seo计费
  • 做门户网站用什么服务器广告营销方式有哪几种
  • 优酷专门给马天宇做的网站seo外包资讯
  • 网页打不开网络正常怎么办广州seo营销培训
  • 设计签名在线生成免费seo网站推广方式
  • 平阳网站开发百度竞价推广的技巧
  • 政府作风建设投诉网站如何让自己网站排名提高
  • 政府网站建设工作经验交流搜狗网站收录
  • 番禺做网站成人编程培训机构排名前十
  • 怎么做蒙文网站百度小说搜索热度排行榜
  • 做网站前端设计需要哪些证书国外搜索引擎网站
  • 自己做培训网站杭州推广系统
  • 泰安网站建设流程无锡网站推广公司
  • 佟年给韩商言做的网站关键词优化排名哪家好
  • 做亚马逊网站费用吗百度指数资讯指数