![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++2.0
&动感超人
读书笔记,不求甚解!
展开
-
C++2.0——多线程的使用之condition_variable
<condition_variable > 头文件主要包含了与条件变量相关的类和函数,如下: condition_variable (C++11) condition_variable_any (C++11) notify_all_at_thread_exit (C++11) cv_status (C++11) std::condition_variablecondition_v原创 2020-10-27 00:11:23 · 311 阅读 · 0 评论 -
C++2.0——多线程的使用async与future
std::asyncasync是一种利用现成的硬件并发来运行自包含异步任务的简单途径;对于async的调用返回一个包含任务结果的future;取决于启动的策略,该任务可以异步的运行在它自己的线程上,也可以同步第运行于任何在此future调用的wait或者get成员的线程上。template<classFunction,class...Args>std::future<std::result_of_t<std::decay_t<Function>(std...原创 2020-10-25 23:37:04 · 423 阅读 · 0 评论 -
C++2.0——多线程的使用 promise 和 packaged_task
<future> 头文件中包含了以下几个类和函数: promise (C++11) future (C++11) shared_future (C++11) packaged_task (C++11) async (C++11)原创 2020-10-25 20:01:24 · 215 阅读 · 0 评论 -
C++ 2.0——多线程的使用之lock_guard 与 unique_lock
C++标准为我们提供了以下基本的锁类型lock_guard(C++11) unique_lock(C++11) shared_lock(C++14) scoped_lock(C++17)以及还提供了几个与锁类型相关的 Tag 类:defer_lock_t不获得互斥的所有权 try_to_lock_t尝试获得互斥的所有权而不阻塞 adopt_lock_t假设调用方线程已拥有互斥的所有权struct defer_lock_t { }; /// Try to acquire...原创 2020-10-24 19:42:15 · 577 阅读 · 0 评论 -
C++2.0 —— 多线程的使用之std::mutex
std::mutex 是C++11 中最基本的互斥量,std::mutex 对象提供了独占所有权的特性——即不支持递归地对 std::mutex 对象上锁,而 std::recursive_lock 则可以递归地对互斥量对象上锁。Mutex 分类std::mutex,最基本的 Mutex 类。 std::recursive_mutex,递归 Mutex 类。 std::time_mutex,定时 Mutex 类。 std::recursive_timed_mutex,定时递归 Mutex 类。原创 2020-10-23 00:27:18 · 889 阅读 · 0 评论 -
C++2.0 —— 多线程的使用之std::thread
基本概念线程状态:在一个线程的生存期内,可以在多种状态之间转换,不同的操作系统可以实现不同的线程模型,定义许多不同的线程状态,每个状态还可以包含多个子状态,但大体来说,如下几种状态是通用的:就绪:参与调度,等待被执行,一旦被调度选中,立即开始执行 运行:占用CPU,正在运行中 休眠:暂不参与调度,等待特定事件发生 中止:已经运行完毕,等待回收线程资源线程环境:线程存在于进程之中,进程内所有全局资源对于内部每个线程都是可见的。进程内典型全局资源如下:代码区:这意味着当前进程空间内所原创 2020-10-22 23:10:16 · 1775 阅读 · 0 评论 -
C++2.0—— 右值引用(Rvalue_reference)的使用
左值和右值左值(lvalue):表达式结束后依然存在的对象,也叫做变量; 右值(rvalue):右值标识是临时性对象的表达式,这类对象没有指定的变量名,都是临时生成的。引用一个引用是它所引用对象的同义词,是其另一个变量名。#include <iostream>using namespace std;int main() { int i = 10;//i:左值 10:右值 int& j = i;//j: 左值引用 j = 100; cout &l原创 2020-10-11 21:10:57 · 336 阅读 · 0 评论 -
C++2.0——lambda、 override和final的介绍
LambdaISO C++ 11 标准的一大亮点是引入Lambda表达式,Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。基本语法如下: [capturelist](parameterlist)mutable->...原创 2020-10-11 17:58:58 · 206 阅读 · 0 评论 -
C++2.0—— =default,=delete、using、noexcept的介绍
=default在C++中,当我们设计与编写一个类时,若不显著申明,则类会默认为我们提供如下几个函数:构造函数 析构函数 拷贝构造函数 拷贝赋值函数 移动构造函数(C++2.0) 移动赋值函数 (C++2.0)C++11允许添加“=default”说明符到函数声明的末尾,以将该函数声明为显示默认构造函数;这就使得编译器为显示默认函数生成了默认实现,它比手动编程函数更加有效;当我们声明一个有参构造函数时,编译器就不会创建默认构造函数。在这种情况下,我们可以使用default说明符来创建默.原创 2020-10-11 16:25:13 · 1643 阅读 · 0 评论 -
C++2.0——explicit、decltype、nullptr、auto 和 for循环
explict在 c++2.0之前,一个参数的构造函数(或者除了第一个参数之外其余参数都有默认值的多参构造函数),承担着两个作用:1. 构造器2. 隐含的类型转换操作符;而explicit关键字一直存在,只能作用在构造函数中, 目的是阻止编译器进行不应该允许的构造函数进行隐式转换。而在C++2.0中,explicit可以支持不止一个参数的构造函数使用。decltypeautonullptr...原创 2020-10-10 23:01:38 · 267 阅读 · 0 评论 -
C++2.0—— 一致性初始化(uniform initialization) 与 Initializer_list
Initializer_list一致性初始化(uniform initialization)C++11引入了“一致性初始化”概念,意思是面对任何初始化动作,可使用相同语法 {},进行一致性的初始化。原创 2020-10-11 00:14:56 · 295 阅读 · 0 评论 -
C++2.0——语言新特性之Variadic Templates
variadic template 特性本身是一个很自然的需求,它完善了 C++ 的模板设计手段。原来的模板参数可以使类和函数的参数类型“任意化”,如果再加上“参数个数的任意化”,那么在参数方面的设计手段就基本上齐备了,有了variadic template 显然可以让设计出来的函数或是类有更大的复用性。因为有很多处理都是与“处理对象的个数”关系不大的,比如说打屏(printf),比如说比较大小(max,min),比如函数绑定子(bind,function要对应各种可能的函数就要能“任意”参数个数和类型)。原创 2020-10-09 23:56:49 · 228 阅读 · 0 评论