1 // Cpp.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
2 //
3
4 #include <iostream>
5 #include <variant>
6 #include <any>
7 #include <string>
8 #include <optional>
9
10 using namespace std;
11 struct Visitor
12 {
13 void operator()(int m) {
14 cout << m << endl;
15 }
16 void operator()(string m) {
17 cout << m.data() << endl;
18 }
19 void operator()(float m) {
20 cout << m << endl;
21 }
22 };
23 std::optional<int> asInt(const std::string& s)
24 {
25 try
26 {
27 return std::stoi(s);
28 }
29 catch (...)
30 {
31 return std::nullopt;
32 }
33 }
34 int mains()
35 {
36 //variant 的好处是可以作为函数返回值
37 using va = std::variant<std::string, int, float>;
38 va v = 23;
39 cout << std::get<int>(v);
40 va v2 = "this is hello";
41 cout << std::get<string>(v2).data();
42 //std::visit 访问variant
43 any data = "this is any data 12";
44 v = 23;
45 std::visit(Visitor(), v); //23
46 v = "this is visitor";
47 std::visit(Visitor(), v); //"this is visitor"
48 v = 3.14157f;
49 std::visit(Visitor(), v); //3.14159
50 //any
51 std::any a = 2;
52 cout << endl << a.type().name() << endl;
53 a = "string";
54 cout << endl << a.type().name() << endl;
55 a = nullptr;
56 cout << endl << a.type().name() << endl;
57 if (nullptr == std::any_cast<std::nullptr_t>(a))
58 {
59 cout << "nullptr" << endl;
60 }
61
62 string tstr = "this is my str";
63 //string_view 不会创建tstr的副本
64 std::string_view view = tstr;
65 cout << view.data() << endl; //this is my str
66 tstr = "i changed it";
67 cout << view.data() << endl; //i changed it
68 //条件内声明变量
69 int m = 12;
70 if (int j = 23; j < 24)
71 {
72 cout << j;
73 }
74 //
75 // convert string to int if possible:
76 /*std::optional<int> asInt(const std::string& s)
77 {
78 try
79 {
80 return std::stoi(s);
81 }
82 catch (...)
83 {
84 return std::nullopt;
85 }
86 }*/
87 for (auto s : { "42", " 077", "hello", "0x33" })
88 {
89 std::optional<int> oi = asInt(s);
90 if (oi.emplace()) { //.has_value()
91 std::cout << "convert '" << s << "' to int: " << *oi << "\n";
92 }
93 else {
94 std::cout << "can't convert '" << s << "' to int\n";
95 }
96 }
97 std::optional<int> opt1 = std::make_optional(23);
98 std::optional<int> opt2 = 22;
99 //访问值*opt2 或者opt2.value()
100 cout << *opt2 << endl; //opt2
101 cout << opt2.value()<<endl; //opt2
102 opt2.emplace(34); //重新赋值
103 cout << *opt2 << endl; //34
104 cout << opt2.value()<<endl; //34
105 opt2.reset(); //清空
106 //opt2.value(); //为nullopt时,调用value报异常
107 cout << opt2.value()<<endl;
108
109 }

c++ 17 demo的更多相关文章

  1. ASP.NET MVC DefaultModelBinder

    转载自 Leo‘s Blog 看到很多ASP.NET MVC项目还在从request.querystring或者formContext里面获取数据,这实在是非常落后的做法.也有的项目建了大量的自定义的 ...

  2. AngularJS 实现页面滚动到底自动加载数据的功能

    要实现这个功能,可以通过https://github.com/sroze/ngInfiniteScroll这个第三方控件来实现.步骤如下: 1. 下载ng-infinite-scroll.js程序ht ...

  3. jquery 页面加载效果

    30个jquery 页面加载效果 30个jquery 页面加载效果   30 CSS Page Preload Animations   加载效果列表 Square Animations Demo 1 ...

  4. php中的form表单

    表单处理 表单的概念在生活中很常见,就像是问卷调查表一样,别人先把问卷发给你,你照着问卷的要求填写,完事过后再将填完的问卷发给别人,从而达到一个将别人需要的信息传递给别人的一种方式. 传统的网页大多数 ...

  5. java学习之- 线程继承Thread类

    标签(空格分隔): 线程 在java.lang包中有个Thread子类,大家可以自行查阅文档,及范例: 如何在自定义的代码中,自定义一个线程呢? 1.通过对api的查找,java已经提供了对线程这类事 ...

  6. [转] js async await 终极异步解决方案

    阅读目录 回顾 Promise async await 字面理解 async.await 如何执行 await 操作符 总结 既然有了promise 为什么还要有async await ? 当然是pr ...

  7. FreeRTOS 基础简介

    为什么选择FreeRTOS UCOS资料多,尤其是中文资料.FreeRTOS资料少,而且大多数是英文的.原因如下: 1.FreeRTOS免费!UCOS收费.这是主要原因 2.很多半导体厂商,采用Fre ...

  8. 基于OpenDDS应用程序开发(3)订阅端实现

    连续的三篇博文演示如何基于OpenDDS开发应用程序,将数据从发布端节点发送到订阅端节点,该示例程序由一个发布者发布数据,一个订阅者订阅数据,使用默认的QoS策略和TCP/IP传输方式. 本文是第三篇 ...

  9. Yolov4性能分析(上)

    Yolov4性能分析(上) 一.目录 实验测试 1) 测试介绍 2) Test 3) Train 二.   分析 1.实验测试 1. 1  实验测试方法 Yolov4训练train实验方法(Darkn ...

  10. idea字节码插件JClassLib——阅读JVM字节码

    idea字节码插件JClassLib--阅读JVM字节码 生成字节码文件并查看 查看字节码文件的方式:javac 文件名.java 即可生成.class文件,但是这种方式不方便 java:是运行字节码 ...

随机推荐

  1. Wpf UI框架 MaterialDesign 的使用记录

    近期公司有桌面客户端的开发需求,并且对样式和界面反馈有一定的要求,对比各种开源UI框架后确认使用MaterialDesign . 1.引入框架MaterialDesignThemes,注意下对应的版本 ...

  2. 文件系统(五):exFAT 文件系统原理详解

    前言 exFAT是微软2006年推出的一种文件系统,距今已快二十年,相比于FAT16和FAT32,exFAT还是算年轻.exFAT一直是微软的一个专用文件系统,直到2019年微软发布它的规范,目前微软 ...

  3. UILabel的DrawDrect方法

    一.问题 如果继承UILabel实现自己的一个Label,并且在子类的DrawRect方法中留空,什么都不写,会发生什么? 代码如下: VC @interface ViewController () ...

  4. 从 Redis 开源协议变更到 ES 国产化:一次技术自主的机遇

    引言 近日,Redis Labs 宣布其主导的开源项目 Redis 将采用双重源代码可用许可证(RSALv2)和服务器端公共许可证(SSPLv1).这一重大决策标志着 Redis 从传统的 BSD 许 ...

  5. Easysearch 容量规划建议

    基于容量估算 主要问题: 每天将索引多少原始数据(GB)?保留数据多少天? 原始数据膨胀率 您将强制执行多少个副本分片? 您将为每个数据节点分配多少内存? 您的内存:数据比例是多少? 原则 保留 +1 ...

  6. 《Android开发卷——自定义日期选择器(二)》

    (小米手机) (中兴手机) 在上一篇中,我介绍了一般公司都会自定义时间日期选择器,并结合自己所做的项目给大家参考. 工作实录之<Android开发卷--自定义日期选择器(一)>链接:htt ...

  7. freemarker模板替换生成word

    工具类 public static void createWord(Map<String,Object> dataMap, String templateName, String file ...

  8. Gradle查看依赖及排除依赖的方法

    查看项目的编译依赖,同时写入文件aa.txt F:\sts4\order-test>gradlew :order-test-api:dependencies --configuration co ...

  9. Python 压缩PDF减小文件大小

    压缩 PDF 文件能有效减小文件大小并提高文件传输的效率,同时还能节省计算机存储空间.除了使用一些专业工具对PDF文件进行压缩,我们还可以通过 Python 来执行该操作,实现自动化.批量处理PDF文 ...

  10. Kafka Stream 以及其他流处理框架对比

    1. Kafka Stream Introduction 假设我们需要对kafka 消息做流数据分析,例如: 对部分消息做过滤 每分钟计算一次收到了多少消息 这种情况下,对于消息过滤以及定时统计,甚至 ...