C++部分新特性

1 using类型别名

  • 新别名紧跟using关键字,可读,容易对齐

         

using value_type=T;
using reference=value_type&;
using const_reference=const value_type&;
  • 生成别名模板(typede不支持这样的功能)
template<typename T>
using remove_cv_t=typename remove_cv<T>::type;

 定宽整数类型

  • int8_t                     INT8_MAX
  • int16_t                   INT16_MAX
  • int32_t                   INT32_MAX
  • int64_t                   INT64_MAX
  • uint8_t                   UINT8_MAX
  • uint16_t                 UINT16_MAX
  • uintptr_t                 UINTPTR_MAX
  • uintmax_t               UINTMAX_MAX

3 enum class

  • 更强的类型,跟整数没有任何隐式转换
  • 独立的作用域,更不容易和其他名字发生冲突
enum class Color:unit8_t{red,green=20,blue};
Color r=Color::blue;
Switch(r){
    case Color::red:cout<<"red\n";break;
    case Color::green:cout<<"green\n";break;
    case Color::blue:cout<<"blue\n";break;
}

int n=r;//错误:不存在从有作用域枚举到int的隐式转换
int n=static_cast<int>(r);//ok,n=21

4 std::byte

  • 定义为:enum class byte:unsigned char{};
  • 支持移位、按位或等比特操作
  • 跟整数类型之间需要显示进行转换,对容器初始化不方便,需要写成{std::byte{0},std::byte{1},...}
  • 不会像unit8_t一样会误作字符输出到终端,需要显式确定使用那种方法输出,可以强制转换成int来显示字节内容,也可以强制转换成unsigned char 来作为字节内容写入文件,提供to_integer函数模板来进行安全转换(C++17)

5 C++的字符类型

  • char:单字节字符或者传统编码字符(C++20前也用来表示UTF-8),字符串字面量:"hi"
  • wchar_t:宽字符(但宽度不确定),字符串字面量:L"hi"
  • char16_t:UTF-16(C++11),字符串字面量:u"hi \u6C49\U0001F600"
  • char32_t:UTF-32(C++11),字符串字面量:U"hi \u6C49\U0001F600"
  • char8_t:UTF-8(C++20),字符串字面量:u8"hi \u6C49\U0001F600"

6 tuple

  • 多元组 固定大小,包含一组异质数据
  • pair的推广
  • get:获取元素
  • tuple_size_v:获取tuple的大小
  • tuple_cat:拼接多个tuple
using my_tuple=tuple<int,string,string>

vector<my_tuple> vn{{1,"one","un"},
                     {2,"two","un"},
                    {3,"three","un"}};
get<2>(vn[0])="une";//访问第一组第三个位置

7 tie

  • 把变量绑定成为引用的tuple
  • 可以通过tuple的幅值一次对多个变量赋值
  • 可以使用std::ignore来忽视某个位置上的变量
#include<tuple>
#include<iostream>
#include<vector>
using my_tuple=tuple<int,string,string>
my_tuple two{2,"two","duex"};
int num;
string french;
tie(num,std::ignore,fench)=two;
cout<<french<<endl;//等到deux

7.1tie和快速比较

  • tuple本身支持比较操作,从前到后逐项比较
  • 使用tie可以快速写出比较函数
strcut PersonInfo{
        string name;
        string id_num;
        int birth_year;
};
bool operator<(const PersonInfo&lhs,const PersonInfo&rhs)
{
        return tie(lhs.name,lhs.id_num)<tie(rhs.name,rhs.id_num);
}

8 结构化绑定(C++17)

multimap<stirng,int>::iterator lower,upper;
std::tie(lower,upper)=mmp.equal_range("four");

auto[lower,upper]=mmp.equal_range("four");//结构化绑定

9 时间(chrono)

9.1时钟(clock)

  • 标准库提供了三种不同的时钟
  • 时钟可以产生时间点

9.2时间点(time_point)

本质上从某一时间点开始的时长

9.3时长(duration)

利用比例的概念的灵活机制

10 随机数(random)

  • 非常灵活而又强大的随机数库
  • 提供对接真正系统随机数的机制
  • 提供多种不同的伪随机数产生器
  • 提供产生特定分布的工具

11 正则表达式(regex)

  • 支持匹配、搜索和替换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值