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. 2024盘古石取证比赛(APK)

    题目列表 使用软件: Notepad++,火眼证据分析软件,雷电分析app,DB browser for SQLCipher 1. 分析伏季雅的手机检材,手机中诈骗APP的包名是:[答案格式:abc. ...

  2. python利用flux基本读写influxDB

    1.读取 QuerApi 形式 python 利用 flux 语句查询 influxdb 数据. https://influxdb-client.readthedocs.io/en/latest/ap ...

  3. Ceph对象网关,多区域网关

    目录 Ceph对象网关,多区域网关 1. 文件系统与对象存储的区别 1.1 对象存储使用场景 1.2 对象存储的接口标准 1.3 桶(bucket) 2. rgw 2.1 对象存储认证 2.2 对象网 ...

  4. NOIP模拟81

    T1 语言 解题思路 模拟即可,对于一个合法的句子直接判断每一个前缀和每一个后缀是否是合法的名词词组. 然后枚举动词的位置判断前后两段是否合法就好了. code #include<bits/st ...

  5. 如何实现sm3加密

    SM3加密应用 何为sm3加密? SM3是由中国国家密码管理局设计的一种密码杂凑函数,类似于SHA-256和MD5等国际标准的散列算法.SM3算法是中国国家标准<GB/T 32905-2016 ...

  6. 查看SO KO 执行程序相关信息命令

    1 查看SO 查看so库的方法__臣本布衣_新浪博客 (sina.com.cn) 1.nm -D libxxx.so 打印出符号信息. 一般这样用:nm -D libxxx.so |grep T $ ...

  7. C语言-使用malloc导致的奔溃问题

    在使用malloc.memset.free的过程中,出现了程序奔溃,大致现象如下. 程序的实现大致如下: #include <stdio.h> #include <stdlib.h& ...

  8. LeetCode 675. Cut Off Trees for Golf Event 为高尔夫比赛砍树 (C++/Java)

    题目: You are asked to cut off trees in a forest for a golf event. The forest is represented as a non- ...

  9. 2 分钟,了解 4 个极为有用的 MetricsQL 函数

    夜莺社区的朋友如果问时序库的选型,我一般都会推荐 VictoriaMetrics,除了其性能.稳定性.集群扩展能力之外,VictoriaMetrics 还扩展了 PromQL,提供了 MetricsQ ...

  10. C++面向对象语言自制多级菜单

    因为要做一个小应用,需要一个菜单类,在网上找了许久,也没有找到一款心仪的菜单类,索性用C++语言,自制一个命令行级别的菜单类,并制作成库,现记录下来,供以后借鉴. 一.特性 无限制条目 无限制层级 用 ...