C 常用新特性(下)
多线程
什么是多线程这里就不过多介绍,新特性关于多线程最主要的就是std::thread的使用,它的使用也很简单,看代码:
这里记住,std::thread在其对象生命周期结束时必须要调用join()或者detach(),否则程序会terminate(),这个问题在C 20中的std::jthread得到解决,但是C 20现在多数编译器还没有完全支持所有特性,先暂时了解下即可,项目中没必要着急使用。
左值右值移动语义相关
大家可能都听说过左值右值,但可能会有部分读者还没有搞清楚这些概念。这里解惑下:
关于左值和右值,有两种方式理解:
概念1:
左值:可以放到等号左边的东西叫左值。
右值:不可以放到等号左边的东西就叫右值。
概念2:
左值:可以取地址并且有名字的东西就是左值。
右值:不能取地址的没有名字的东西就是右值。
举例来说:
a是左值,有变量名,可以取地址,也可以放到等号左边, 表达式b c的返回值是右值,没有名字且不能取地址,&(b c)不能通过编译,而且也不能放到等号左边。
左值一般有:
函数名和变量名
返回左值引用的函数调用
前置自增自减表达式 i、--i
由赋值表达式或赋值运算符连接的表达式(a=b, a = b等)
解引用表达式*p
字符串字面值"abcd"
介绍右值前需要先介绍两个概念:纯右值和将亡值。
运算表达式产生的临时变量、不和对象关联的原始字面量、非引用返回的临时变量、lambda表达式等都是纯右值。例如:
除字符串字面值外的字面值
返回非引用类型的函数调用
后置自增自减表达式i 、i--
算术表达式(a b, a*b, a&&b, a==b等)
取地址表达式等(&a)
而将亡值是指C 11新增的和右值引用相关的表达式,通常指将要被移动的对象、T&&函数的返回值、std::move函数的返回值、转换为T&&类型转换函数的返回值,将亡值可以理解为即将要销毁的值,通过“盗取”其它变量内存空间方式获取的值,在确保其它变量不再被使用或者即将被销毁时,可以避免内存空间的释放和分配,延长变量值的生命周期,常用来完成移动构造或者移动赋值的特殊任务。例如:
std::file_system
C 17正式将file_system纳入标准中,提供了关于文件的大多数功能,基本上应有尽有,这里简单举几个例子:
file_system之前,想拷贝个文件、获取文件信息等都需要使用好多C语言API搭配使用才能完成需求,而有了file_system,一切都变得相当简单。file_system是C 17才引入的新功能,但其实在C 14中就可以使用了,只是file_system在std::experimental空间下。
std::chrono
chrono很强大,也是我常用的功能,平时的打印函数耗时,休眠某段时间等,我都是使用chrono。
在C 11中引入了duration、time_point和clocks,在C 20中还进一步支持了日期和时区。这里简要介绍下C 11中的这几个新特性。
Rep表示一种数值类型,用来表示Period的数量,比如int、float、double,Period是ratio类型,用来表示【用秒表示的时间单位】比如second,常用的duration已经定义好了,在std::chrono::duration下:
ratio<3600, 1="">:hours
ratio<60, 1="">:minutes
ratio<1, 1="">:seconds
ratio<1, 1000="">:microseconds
ratio<1, 1000000="">:microseconds
ratio<1, 1000000000="">:nanosecons
ratio的具体模板如下:
clocks
时钟,chrono里面提供了三种时钟:
steady_clock
system_clock
high_resolution_clock
steady_clock
稳定的时间间隔,表示相对时间,相对于系统开机启动的时间,无论系统时间如何被更改,后一次调用now()肯定比前一次调用now()的数值大,可用于计时。
system_clock
表示当前的系统时钟,可以用于获取当前时间:
high_resolution_clock
high_resolution_clock表示系统可用的最高精度的时钟,实际上就是system_clock或者steady_clock其中一种的定义,官方没有说明具体是哪个,不同系统可能不一样,我之前看gcc chrono源码中high_resolution_clock是steady_clock的typedef。
声明:
本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
C 常用新特性(下)相关推荐
- 【SQL开发实战技巧】系列(四十五):Oracle12C常用新特性☞VARCHAR2/NVARCHAR2类型最大长度由4000字节扩展到32767字节
系列文章目录 文章目录 系列文章目录 前言 Oracle12C常用新特性☞VARCHAR2/NVARCHAR2类型最大长度由4000字节扩展到32767字节 案例一:CDB+PDB环境启用扩展 案例二 ...
- 【SQL开发实战技巧】系列(四十七):Oracle12C常用新特性☞非分区表在线转分区表online clause(不停业务+索引有效)
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- rhel6系统中,mysql 5.6复制新特性下主从复制配置[基于GTID]
1.mysql5.6在复制方面的新特性: (1).支持多线程复制:事实上是针对每个database开启相应的独立线程,即每个库有一个单独的(sql thread).针对这样的改进,如果我们想实现多线程 ...
- C#: 8.0 和 9.0 常用新特性
在<带你了解C#每个版本新特性> 一文中介绍了,C# 1.0 到 7.0 的不同特性,本文接着介绍在 8.0 和 9.0 中的一些常用新特性. C# 8.0 在 dotNET Core 3 ...
- JDK1.8新特性及常用新特性
JDK1.8的新特性 *Lambda表达式 新的日期API--Date time 引入Optional--防止空指针异常 *接口的默认方法和静态方法 *新增方法引用格式 *新增Stream类 注解相关 ...
- Java8常用新特性详解
文章目录 Java8新特性纵览 Lambda表达式 为什么使用Lambda表达式? 简单使用 Lambda语法规则 函数式接口 什么是函数式(Functional)接口 如何理解函数式接口 Java内 ...
- JDK1.8,Java8常用新特性
A.Lamdba表达式 1.Java8概述 Java8,也就是jdk1.8,是意义深远的一个新版本 是Java5之后一个大的版本升级,让Java语言和库仿佛获得了新生 新特性包含: a.随着大数据的兴 ...
- php7.1函数,PHP7.1常用新特性和函数
在php7发布了之后,官方又紧接着发布了php7.1.php7.2,我们也接着使用了新版本.接下来就说说7.1有那些新的特性. Nullable types 在7的时候,如果使用了强类型就必须传递或者 ...
- C 常用新特性(上)
下面是正文: auto类型推导 auto可以让编译器在编译器就推导出变量的类型,看代码: 利用auto可以通过=右边的类型推导出变量的类型. 什么时候使用auto呢?简单类型其实没必要使用auto,然 ...
最新文章
- selenium工具的安装
- android端使用http2.0,android Retrofit2+okHttp3使用总结
- Matter App提供了一个由BCH推动的长格式博客平
- Python 计算机视觉(二) —— OpenCV 基础
- Python中的数值类型
- python Logging日志记录模块详解
- css固定在右中间位置,css布局,左右固定中间自适应实现
- 不愧是击溃服务器的男人!周杰伦《说好不哭》刷新QQ音乐单曲纪录
- 【DIOCP开源项目】实际应用案例
- pytorch笔记-实现一个图像分类模型
- Android 编程下 Using ViewPager for Screen Slides
- 大数据-Hive开窗函数
- 计算机速录水平考试,汉字速录水平测试(速录证考试报名网站)
- GeekTool使用备忘
- Excel2010 count,countif,countifs使用
- springboot 整合mybatis plus
- 服装企业在实践中探索
- The Shawshank Redemption-10
- Android无法打开相册查看视频
- Vidyo提供的云化视频会议与传统的视频会议有什么区别?
热门文章
- javase11源码文件_JavaSE 7,8:确定特定文件系统支持的视图
- java集合根据值排序_Java 8:对集合中的值进行排序
- Java Iterator到Java 8 Stream
- java ee cdi_Java EE CDI依赖注入(@Inject)教程
- xstream xml模板_XStream – XStreamely使用Java中的XML数据的简便方法
- Spring Boot和Thymeleaf:重新加载模板和静态资源,而无需重新启动应用程序
- JLBH示例4 – QuickFix vs ChronicleFix基准化
- 定制Hamcrest Matchers
- 收到有关RabbitMQ集群分区的通知
- 自定义汇编程序,Weaver和运行时的可插拔知识