首页 > 编程语言 >C++11新特性(四):库特性

C++11新特性(四):库特性

时间:2024-08-24 11:15:31浏览次数:6  
标签:11 std tu C++ 特性 类型 unordered 指针

C++11新特性

库特性

std::move

用于实现移动语义的函数,完成左值到右值的转换,参见C++11新特性(一)

std::forward

用于实现完美转发的函数,直接将参数的类型传递到参数中,右值不会退化为左值

std::thread

thread是引入的线程库,用于创建线程,并发编程。

std::to_string()

to_string能够完成的作用是将数字转换为字符串。stoi()函数将字符转为数字,一定要注意提前检查字符一定是数字,而不是数字意外的其它字符,否则会程序崩溃,不安全,最好提前入口检查。

type_traits类型特性库

类型特性库包含了一组编译时检查类型特性的工具,可以配合static_assert使用。

// 基本类型判断包括整型、浮点型等
std::is_integral<T>::value // 检查T是否是整数类型,value是一个静态常量,其值为true或false
// 类型修饰
std::remove_const<T> // 移除类型T的const修饰
// 类型转换
std::add_const<T> // 为类型T添加const修饰
// 类型特性检查
std::is_same<T, U> // 检查两个类型是否相同
// 条件类型
std::conditional<Condition, T, F> // Condition为true, 则类型为T,否则为F

智能指针

智能指针位于#include <memory> 一般有三种,share_ptr共享指针,用于多个读;weak_ptr弱指针,解决共享指针循环引用计数无法下降问题; unique_ptr独占指针,用于独享资源。

std::chrono

chrono库提供一系列定时器函数

tuples元组

tuple<int, int, int> t{1, 2, 3};
auto tu = make_tuple(1, 2 ,3);
get<0>(tu); // 获取元组第1个元素
get<1>(tu); // 获取元组第2个元素
get<2>(tu); // 获取元组第3个元素

std::tie绑定

tie提供对象到tuple或者pair的绑定

tuple<int, int, int> t{1, 2, 3};
int id;
tie(std::ignore, id, std::ignore) = t; // 此时就会将id绑定到第二个元素上 id:2
pair<int, int> p{1, 2};
int x, y;
tie(x, y) =  p;
// c++17之后可以直接使用结构绑定
auto [id1, id2] = p;

std::array数组容器

数组容器,有强制类型检查,连续存储可以告诉访问,可以用于存储特定个数元素。vector是可以扩容的

std::array<int, 5> intArray{1, 2, 3, 4, 5};

unordered containers未排序容器

// 底层都是红黑树实现
unordered_map<key, value>;
unordered_multiset<key, value>;
unordered_set<key, value>;
unordered_multiset<key, value>;

std::make_shared

这个库函数用于生成共享指针

std::ref

ref创建容器存储对象的引用

int val = 0;
auto re = std::ref(val);

std::async

异步函数,用于异步任务创建

std::begin()std::end()

这两个库函数用于获取首尾迭代器

内存模型

内存模型提供对原子操作和线程的支持。

标签:11,std,tu,C++,特性,类型,unordered,指针
From: https://www.cnblogs.com/solicit/p/18377550

相关文章

  • C++11新特性(三):语言特性
    C++11新特性范围for循环std::vector<int>nums;for(autoit:nums){cout<<*it<<endl;}array<5,int>a{1,2,3,4,5};for(autox:a){x*=2;//此时a中元素不会发生改变a{1,2,3,4,4}}for(auto&x:a){x*=2;//此时a中元素会发......
  • Java 12 新特性—Switch 表达式
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • Java 12 新特性—新增 String API
    作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!阶段1、深入多线程阶段2、深入多线程设计模式阶段3、深入juc源码解析阶段4、深入jdk其余源码解析......
  • C++学习,关键字
    列表是C++中的保留字,这些保留字不能用作常量或变量或任何其它标识符名称:asmelsenewthisautoenumoperatorthrowboolexplicitprivatetruebreakexportprotectedtrycaseexternpublictypedefcatchfalseregistertypeidcharfloatreinterpret_casttypenameclassforreturnunionconstfr......
  • C++学习, 变量作用域
    从广义上看,有三个地方,可以声明变量:在函数或块中声明的变量,为局部变量。在函数参数定义的变量,为形式参数。在所有函数之外的变量,为全局变量。局部变量(LocalVariables)在函数或块内声明的变量是局部变量。它们只能由该函数或代码块中的语句使用。本地变量不为其自......
  • C++11新特性(二):语言特性
    C++11新特性语言特性nullptr空指针nullptr空指针的使用可以规避掉以往设置为NULL的风险。NULL在编译器中常常被设置为0或者其它数字,此时判断指针是否为NULL,即判断指针类型是否能够等于整型值,并不安全。int*p=nullptr;强类型枚举强类型枚举不能隐式转换为int类型,可以指定......
  • C++学习笔记----4、用C++进行程序设计(五)---- 非复合与继承关系
        在考虑类之间到底是什么关系时,要首先考虑一下是否真的有关系。不要搞有罪推定,直接问犯了什么罪,要先看是否是犯罪行为。不要让你对面向对象的设计的热情转变为大量不需要的类或者继承的类的关系中。    有一个大家都容易陷入的怪圈就是在现实世界中很明显......
  • dotnet X11 多次调用 XPutImage 是否能做到渲染同步
    本文将告诉大家我在麒麟系统和统信系统以及分别搭配飞腾和兆芯处理器的设备上,使用连续的XPutImage方法推送界面,测试是否能够在一次渲染内完成。测试结论是不能做到渲染同步本文的核心测试代码如下XPutImage(display,handle,gc,refxImage,@event.ExposeEvent.x,@......
  • C++基础干货笔记!
    目录一、C++的第一个程序:二、命名空间namespace:1.namespace的定义:2.namespace的使用三、C++输入与输出四、缺省参数 定义与注意:五、函数重载六、引用1.引用的概念2.引用的特性3.const引用 4.引用和指针的关系六、inline1.概念与使用事项:七、nullptr概念:......
  • (2024最新毕设合集)德阳香树园游泳馆管理系统-50428|可做计算机毕业设计JAVA、PHP、爬虫
    德阳香树园游泳馆管理系统的设计与实现摘 要本文介绍了德阳香树园游泳馆管理系统的设计与实现。该系统采用B/S模式,使用Java语言开发,借助SSM框架和MySQL数据库进行后台支持。此外,还结合微信小程序框架Uniapp进行开发,以提供更便捷的用户体验。德阳香树园游泳馆管理系统旨在......