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

网站功能与内容设计的步骤山东感染地图

网站功能与内容设计的步骤,山东感染地图,模板网站做外贸可以吗,wordpress 文章内链模版类std::optional管理一个可选的(optional)存储值(contained value)&#xff0c;即可能存在也可能不存在的值。std::optional的一个常见用例是存储可能失败的函数的返回值。与其它方法相反(例如std::pair<T, bool>),std::optional可以很好地处理构造成本高昂的对象&am…

      模版类std::optional管理一个可选的(optional)存储值(contained value),即可能存在也可能不存在的值。std::optional的一个常见用例是存储可能失败的函数的返回值。与其它方法相反(例如std::pair<T, bool>),std::optional可以很好地处理构造成本高昂的对象,并且更具可读性,因为意图被明确表达。
      在任何给定时间点的std::optional的任何实例要么存储值,要么不存储值。如果std::optional存储一个值,则保证该值作为std::optional对象占用空间的一部分进行分配,即不会发生动态内存分配。
      当std::optional<T>类型的对象根据上下文转换为bool时,如果该对象存储一个值,则转换返回true;如果不存储值,则转换返回false。
      和std::variant、std::any一样,std::optional对象有值语义,其拷贝操作会被实现为深拷贝。std::optional对象也支持move语义
      std::optional模拟了一个可以为空的任意类型的实例,它可以被用作成员、参数、返回值等。

      std::optional提供了一种标准化的方式来表示可选值(optional value),消除了对空指针的需要并增强了代码的可读性。std::optional是使用原始指针或其它机制来表示缺失值或可选值的更安全的替代方案。根据设计,std::optional强制用户在访问某个值之前显式检查该值是否存在,从而最大限度地降低空指针解引用错误的风险。

      std::make_optional:创建一个用参数初始化的std::optional对象。

      std::nullopt是std::nullopt_t类型的常量,用于指示具有未初始化(或空的)状态的std::optional类型,作为std::optional对象无值时候的"值".
      std::optional特别适合延迟初始化问题,它本身就是延迟初始化的一个实例。所存储的T可以在构造时初始化,或者稍后初始化,或者从不初始化。

int test_optional_init()
{std::optional<int> var;if (!var.has_value())std::cout << "var is not set\n"; // var is not setvar = 8; // error: *var = 8, 因为var采用默认初始化为空if (var.has_value())std::cout << "var is present: " << var.value() << "\n"; // var is present: 8if (var)std::cout << "var is present: " << *var << "\n"; // var is present: 8std::optional<int> var2{ std::nullopt }; // 将var2初始化置于"empty"状态if (!var2.has_value())std::cout << "var2 is not set\n"; // var2 is not setstd::optional<std::string> var3{ "China" };if (var3 > std::nullopt)std::cout << "var3 > std::nullopt\n"; // var3 > std::nulloptauto var4 = std::make_optional<std::vector<char*>>({ "China", "Beijing", "Haidian" });for (const auto& v : *var4)std::cout << " " << v; //  China Beijing Haidianstd::cout << "\n";// 内建类型可不需指明存储类型,deduction guidestd::optional var5{ 2 }; std::cout << "var5: " << var5.value() << "\n"; // var5: 2std::optional var6{ std::string{"China"} };std::cout << "var6: " << var6.value() << "\n"; // var6: Chinareturn 0;
}

      std::optional成员函数:
      1.访问存储值:
      (1).var.value():返回引用;如果没有值,会抛出std::bad_optional_access异常;
      (2).*var:如果没有值,会crash(or undefined behavior),返回存储值的引用;应该只用于已经确定含有值的场景
      (3).var.value_or:返回值,注意与value()的区别;如果没有值,则获取备选值;
      (4).var->:返回存储值的指针,可访问内部值的成员
      2.emplace:赋予一个新值(in-place);如果在调用之前已经存储一个值,则通过调用其析构函数来销毁所存储的值;
      3.reset:如果存储一个值,则销毁该值;否则,没有任何影响;
      4.has_value:返回std::optional对象是否存有值;
      5.operator bool():返回std::optional对象是否存有值;
      6.swap:交换两个std::optional对象的值;
      非成员函数:比较std::optional对象:operator==, !=, <, <=, >, >=, <=>。比较std::optional对象时,"empty"值即std::nullopt比任何有值的std::optional对象都要小
      std::bad_optional_access:是一个异常类,直接派生自std::exception,用于处理在访问std::optional对象时发生的错误,当尝试访问一个没有存储值的std::optional对象时,会抛出std::bad_optional_access异常。

int test_optional_member_functions()
{// 获取std::optional值: var.value(), *var, var.value_or, var->std::optional<int> var{ 8 };std::cout << "var: " << var.value() << ", " << *var << "\n"; // var: 8, 8*var = 6; std::cout << "var: " << *var << "\n"; // var: 6var = 8; std::cout << "var: " << *var << "\n"; // var: 8*var = 10; std::cout << "var: " << var.value_or(66) << "\n"; // var: 10var.reset(); std::cout << "var: " << var.value_or(66) << "\n"; // var: 66std::optional<std::string> var2{ "China" };std::cout << "var2: " << var2->data() << "\n"; // var2: Chinavar.reset(); // or: var = {};try {std::cout << "var: " << var.value() << "\n";//std::cout << "var: " << *var << "\n"; // 直接crash掉}catch (const std::bad_optional_access& e) {std::cout << "exception: " << e.what() << "\n"; // var: exception: Bad optional access}std::string str{ "Beijing" }; // 不要对常量变量使用std::movestd::optional<std::string> var3(std::move(str));std::cout << "var3: " << var3.value() << ", str: " << str << "\n"; // var3: Beijing, str:var3.emplace("Haidian");std::cout << "var3: " << var3.value() << "\n"; // var3: Haidianif (var3.has_value())std::cout << "var3 has value\n"; // var3 has valueif (var3)std::cout << "var3 has value\n"; // var3 has valuestd::cout << "var2: " << var2.value() << ", var3: " << var3.value() << "\n"; // var2: China, var3: Haidianvar2.swap(var3);std::cout << "var2: " << var2.value() << ", var3: " << var3.value() << "\n"; // var2: Haidian, var3: Chinaif (var2 != var3)std::cout << "var2 != var3\n"; // var2 != var3return 0;
}

      执行结果如下图所示:

      GitHub:https://github.com/fengbingchun/Messy_Test

http://www.yayakq.cn/news/245200/

相关文章:

  • 怎么做刷业务网站网站建设时送的ppt方案
  • 岳阳网站建设 熊掌号高端定制站开发
  • 投资建设集团网站装修公司网站建设方案
  • 前端网站建设免费网站统计
  • 苏州商城网站建设二手房网站建设方案
  • 淘宝网站怎么建设网络渠道有哪些
  • 大连做网站价格网站有什么到期
  • 优惠网站如何做小程序平台入口
  • 做设计去哪些网站下载素材黑马培训是正规学校吗
  • 公司网站首页布局图南昌seo方案
  • 网站地址怎么申请注册游戏推广招聘
  • 聚美优品网站建设今天宁波最新消息
  • 专门做ppt的网站名称修改wordpress用户密码
  • 建设部网站公告网站友情链接怎么设置
  • 网站建设名词解释与简答题wordpress 信息发布
  • 烟台网站建设比较大的wordpress后台总是404
  • 怎样做好网站运营新品发布会海报
  • 松江做网站多少钱建设网络强国要有自己的技术
  • 广州技术支持 网站建设在哪个网站做劳动用工备案
  • 合肥国际网站建设正规平台北京建设银行支行查询官方网站
  • seo站长网怎么下载wordpress 共存
  • 海口网站建设费用移动端网站如何开发
  • 新手自学做网站多久个人简历网站开发
  • 台州seo网站建设费用网站前台功能模块设计
  • 做catia数据的网站icon psd下载网站
  • 史志部门建设网站 说明制作网页时一般需要兼容哪些浏览器
  • 网站开发的未来展望做旅游网站的yi
  • 网站建设的话术推广之家
  • 淘宝上做网站的信得过吗服装设计网站大全
  • 成都科技网站建设电网站建设公司有哪些