c++ 17 demo


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的更多相关文章
- ASP.NET MVC DefaultModelBinder
转载自 Leo‘s Blog 看到很多ASP.NET MVC项目还在从request.querystring或者formContext里面获取数据,这实在是非常落后的做法.也有的项目建了大量的自定义的 ...
- AngularJS 实现页面滚动到底自动加载数据的功能
要实现这个功能,可以通过https://github.com/sroze/ngInfiniteScroll这个第三方控件来实现.步骤如下: 1. 下载ng-infinite-scroll.js程序ht ...
- jquery 页面加载效果
30个jquery 页面加载效果 30个jquery 页面加载效果 30 CSS Page Preload Animations 加载效果列表 Square Animations Demo 1 ...
- php中的form表单
表单处理 表单的概念在生活中很常见,就像是问卷调查表一样,别人先把问卷发给你,你照着问卷的要求填写,完事过后再将填完的问卷发给别人,从而达到一个将别人需要的信息传递给别人的一种方式. 传统的网页大多数 ...
- java学习之- 线程继承Thread类
标签(空格分隔): 线程 在java.lang包中有个Thread子类,大家可以自行查阅文档,及范例: 如何在自定义的代码中,自定义一个线程呢? 1.通过对api的查找,java已经提供了对线程这类事 ...
- [转] js async await 终极异步解决方案
阅读目录 回顾 Promise async await 字面理解 async.await 如何执行 await 操作符 总结 既然有了promise 为什么还要有async await ? 当然是pr ...
- FreeRTOS 基础简介
为什么选择FreeRTOS UCOS资料多,尤其是中文资料.FreeRTOS资料少,而且大多数是英文的.原因如下: 1.FreeRTOS免费!UCOS收费.这是主要原因 2.很多半导体厂商,采用Fre ...
- 基于OpenDDS应用程序开发(3)订阅端实现
连续的三篇博文演示如何基于OpenDDS开发应用程序,将数据从发布端节点发送到订阅端节点,该示例程序由一个发布者发布数据,一个订阅者订阅数据,使用默认的QoS策略和TCP/IP传输方式. 本文是第三篇 ...
- Yolov4性能分析(上)
Yolov4性能分析(上) 一.目录 实验测试 1) 测试介绍 2) Test 3) Train 二. 分析 1.实验测试 1. 1 实验测试方法 Yolov4训练train实验方法(Darkn ...
- idea字节码插件JClassLib——阅读JVM字节码
idea字节码插件JClassLib--阅读JVM字节码 生成字节码文件并查看 查看字节码文件的方式:javac 文件名.java 即可生成.class文件,但是这种方式不方便 java:是运行字节码 ...
随机推荐
- 平衡二叉树(AVL)插入结点后的再平衡思路
理解平衡二叉树 在解决平衡二叉树动平衡问题,我们先来明确什么是平衡二叉树: 平衡二叉树是二叉搜索树的一种特殊情况,所以在二叉搜索树的基础上加上了如下定义: 平衡因子:我们将二叉树中各个结点的左右子树的 ...
- Swoole 源码分析之 Http Server 模块
首发原文链接:Swoole 源码分析之 Http Server 模块 Swoole 源码分析之 Http Server 模块 Http 模块的注册初始化 这次我们分析的就是 Swoole 官网的这段代 ...
- centos7下启动Django项目报错(sqlite错误)
报错内容如下: [root@localhost project]# python3 manage.py runserver Watching for file changes with StatRel ...
- NumPy 泊松分布模拟与 Seaborn 可视化技巧
泊松分布 简介 泊松分布是一种离散概率分布,用于描述在给定时间间隔内随机事件发生的次数.它常用于模拟诸如客户到达商店.电话呼叫接入中心等事件. 参数 泊松分布用一个参数来定义: λ:事件发生的平均速率 ...
- navicat 如何调整查询区域字体大小
Navicat是一套快速.可靠和全面的数据库管理工具,专门用于简化数据库管理和降低管理成本.Navicat图形界面直观,提供简便的管理方法,设计和操作MySQL.MariaDB.SQL Server. ...
- BGP中next-hop-self 小实验
next-hop-self 在EBGP和IBGP边界使用,对ibgp下一跳邻居使用 配置命令 router bgp 1234 neighbor 2.2.2.2 next-hop-self 使用Next ...
- 语义化结构标签 多媒体标签 H5新增表单内容
语义化结构标签: section 更偏向于一个区域类似div(块) article 更偏向于显示内容(块) aside 标签作为article呢绒的辅助板块(块) header 标签做为一个网页头部 ...
- 使用命令行(powershell)压缩(7Z RAR)指定日期文件
使用命令行(powershell)压缩(7Z RAR)指定日期文件,powershell ,7z. WINDOWS命令行是无法按时间过滤文件的,我们通过powershell 里的Get-ChildIt ...
- C# yyyyMMddHHmmss 格式的日期转换
C# yyyyMMddHHmmss 格式的日期转换 DateTime dtTimeEnd = DateTime.Now; if (!string.IsNullOrWhiteSpace(rspA.fin ...
- 大模型高效微调-LoRA原理详解和训练过程深入分析
博客首发于我的知乎,详见:https://zhuanlan.zhihu.com/p/702629428 一.LoRA原理 LoRA(Low-Rank Adaptation of LLMs),即LLMs ...