首页 > 其他分享 >std::optional的使用

std::optional的使用

时间:2023-08-10 12:32:28浏览次数:36  
标签:std printf value 使用 include optional o1

optional是一个模板类:

template <class T>
class optional;

它内部有两种状态,要么有值(T类型),要么没有值(std::nullopt)。有点像T*指针,要么指向一个T类型,要么是空指针(nullptr)。

std::optional有以下几种构造方式:

#include <iostream>
#include <optional>
using namespace std;
 
int main() {
    optional<int> o1;  //什么都不写时默认初始化为nullopt
    optional<int> o2 = nullopt;  //初始化为无值
    optional<int> o3 = 10;  //用一个T类型的值来初始化
    optional<int> o4 = o3;  //用另一个optional来初始化
    return 0;
}

查看一个optional对象是否有值,可以直接用if,或者用has_value()

#include <iostream>
#include <optional>
using namespace std;
 
int main() {
    optional<int> o1;
    if (o1) {
        printf("o1 has value\n");
    }
    if (o1.has_value()) {
        printf("o1 has value\n");
    }
    return 0;
}

当一个optional有值时,可以通过用指针的方式(*号和->号)来使用它,或者用.value()拿到它的值:

#include <iostream>
#include <optional>
#include <string>
using namespace std;
 
int main() {
    optional<int> o1 = 5;
    printf("%d\n", *o1);
    optional<string> o2 = "hello";
    printf("%s\n", o2->c_str());
    printf("%s\n", o2.value().c_str());
    return 0;
}

将一个有值的optional变为无值,用.reset()。该函数会将已存储的T类型对象析构掉

#include <iostream>
#include <optional>
using namespace std;
 
int main() {
    optional<int> o1 = 5;
    o1.reset();
}


标签:std,printf,value,使用,include,optional,o1
From: https://blog.51cto.com/u_16001762/7033199

相关文章

  • 禁用账号密码使用ssh私钥登录服务器
    1、生成ssh信息id_rsa为私钥,id_rsa.pub为公钥。私钥自己下载到本地电脑妥善保存(丢失后就无法再登陆了)建议删除服务器端的私钥。公钥则可以任意公开。ssh-keygen-trsa--------------------------------------输入生成的名称密码确认密码2、公钥导入到系统中cat/roo......
  • PHP语言使用隧道代码示例
    /***请求**@param[type]$targetUrl目标站点*@param[type]$proxyIp代理ip*@param[type]$proxyPort代理端口*@param[type]$proxyUserAuthKey*@param[type]$proxyPasswordAuthPwd*@returnvoid*/functionsendRequest($targetUrl,$proxyIp,$proxyPort,$proxy......
  • java 中怎么部署使用redis
    在Java中使用Redis,你需要完成以下步骤来部署和使用Redis:1.下载并安装Redis:你可以从Redis官方网站下载Redis的最新版本,并按照官方文档提供的说明进行安装。2.添加Redis的Java依赖:在你的Java项目中,你需要添加Redis的Java客户端依赖。目前比较常用的JavaRedis客户端有Jedis、Lettuc......
  • 因时间导致录像设备显示播放异常,使用国标GB28181视频平台LiteCVR录像设备显示播放异常
    近期我们整理并汇总了一些往期使用者在使用LiteCVR视频汇聚平台时候出现的技术问题反馈,并将逐步分享出根据使用者的反馈和问题描述的技术问题的解决办法来供大家参考。该图是该平台的运作模式,以便各位能够更好的理解类似设备出现相同技术故障该如何处理。这次的技术问题是这样的,根......
  • 【OSS】使用java-sdk上传文件失败,报错InvalidBucketName,BucketName是文件名
    【OSS】使用java-sdk上传文件失败,报错InvalidBucketName,BucketName是文件名背景:aliyun-sdk-ossV2.8.3排查过程:使用javasdk报错invalidbucketname,查看bucketname字段被设置为了文件名问题原因当前java-sdk版本是v2.8.3,需要更新版本。初始化client时关闭cnameco......
  • 使用vue+openLayers开发离线地图以及离线点位的展示
    1.下载引入到需要的组件中npminstallol2.需要用到的api...(根据开发需求以及实际情况进行引入)importolfrom"ol";import"ol/ol.css";importMapfrom"ol/Map";importViewfrom"ol/View";importFeaturefrom"ol/Feature";importPoin......
  • 21.1 使用PEfile分析PE文件
    PeFile模块是Python中一个强大的便携式第三方PE格式分析工具,用于解析和处理Windows可执行文件。该模块提供了一系列的API接口,使得用户可以通过Python脚本来读取和分析PE文件的结构,包括文件头、节表、导入表、导出表、资源表、重定位表等等。此外,PEfile模块还可以帮助用户进行一些......
  • 使用在线Excel时,有哪些方法可以引入计算函数?
    摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言在日常生活和工作中,我们都会或多或少的使用Excel中的计算公式函数,比如求和公式、平均数公式等。今天为大家整理了一些在线Excel中可......
  • quarkus依赖注入之十一:拦截器高级特性上篇(属性设置和重复使用)
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览本篇是《quarkus依赖注入》系列的第十一篇,之前的[《拦截器》]学习了拦截器的基础知识,现在咱们要更加深入的了解拦截器,掌握两种高级用法:拦截器属性和重复使用拦截......
  • 面试题:使用Java代码实现B系统与A系统企业信息定时同步
      java代码实现B系统与A系统企业信息的定时同步.具体要求如下:需要使用ApacheHttpComponentsClient实现接口调用;分页调用接口文档中“获取客户列表”接口接收数据,存储到customer表中;每10分钟同步一次企业信息;A系统企业出现增,删,改,B系统都能够同步;接口调用需要有重试机制......