C++11 新特性

1、auto — 自动类型推导

auto只是一个占位符,编译期间会被真正的类型所替代。

  • auto的限制:1)auto必须对变量进行初始化;2)不能作为函数参数;3)不能作用于类的非静态成员变量;4)不能用于定义数组;5)不能作用于模板参数。
  • auto的应用:1)定义迭代器; 2)用于泛型编程。

2、 decltype — 自动类型推导

关键字decltype 用于在编译期间进行自动类型推导。

auto varname = value;                       //auto根据右边的初始值value推到出变量类型
decltype(exp) varname = value;      //decltype根据表达式exp推导出变量类型

3、返回值类型后置 

4、左值/右值引用 

左值:在内存有确定的存储地址,有变量名,表达式结束后依旧存在的值——非临时对象

右值:在内存没有确定的地址,没有变量名,表达式结束就会销毁的值——临时对象

 总结:非常量左值只能绑定左值;常量左值既可绑定左值,也可绑定右值。

移动语义

完美转发: 

5、tuple元组 

6、lambda匿名函数 

[外部变量访问方式说明符] (参数) mutable noexcept/throw() -> 返回值类型

外部变量访问格式定义
外部变量格式功能
[]不导入任何外部变量
[=]以值传递导入所有外部变量
[&]以引用传递导入所有变量
[val1,val2,...]以值传递导入val1、val2等指定变量,不分先后次序
[&val1, &val2,...]以引用传递导入val1、val2等指定变量,不分先后次序
[val1, &val2,...]val1值传递,val2引用传递
[=,&val1, ...]除val1以引用传递导入外,其它变量都以值传递方式导入
[this]以值传递方式导入当前的this指针

//没有任何功能的lambda匿名函数
[]{}


//一个简单的lambda匿名函数
[](int x){cout<<x<<endl};

7、基于范围的for循环

vector<int>vec{1,3,7,0};

//只遍历,不修改
for(auto i : vec)
{
   cout << i << endl;
}


//边遍历,边修改:引用
for(auto &i : vec)
{
    i = i + 2;         
    cout << i << endl;
}

8、constexpr—常量表达式 

9、move() — 实现移动语义 

 move(arg) : 将左值对象arg强制转化为右值,用于实现移动语义。

10、nullptr — 初始化空类型指针 

11、智能指针 

unique_ptr : 独占所有权;可以允许移动所有权,而不是进行复制或复制操作。

shared_ptr:  共享所有权;底层是采用引用计数的方式实现

weak_ptr:   用于解决 shared_ptr 循环引用问题

在使用 shared_ptr 时,容易出现循环引用的问题,即两个对象互相引用,导致它们的计数器无法降为 0,从而导致内存泄漏。  

weak_ptr 仅仅是一个指向 shared_ptr 对象的弱引用, 不会增加引用计数。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++11引入了许多新特性,其中包括线程池的实现。在引用中的代码中,ZERO_ThreadPool类封装了线程池的功能。线程池的原理是通过维护一个线程队列和一个任务队列来实现的。 在初始化阶段,通过调用init函数来初始化线程池。该函数会创建指定数量的线程,并将其保存在threads_队列中。如果线程池已经被初始化过,则直接返回false。 在启动线程池后,调用start函数。该函数会循环创建指定数量的线程,并将它们放入threads_队列中。每个线程都会调用run函数来执行任务。 当调用exec函数时,会将任务添加到tasks_队列中。其中,std::bind用于绑定一个成员函数和其参数,以及占位符std::placeholders::_1表示传入的参数。 在waitForAllDone函数中,会判断atomic_是否为0且tasks_是否为空。如果是,则表示所有任务已经执行完毕,线程池可以退出。 线程池的stop函数用于停止线程池的运行。它会遍历threads_队列,并调用每个线程的join函数,等待线程执行完毕后再返回。 以上就是C++11新特性线程池的基本原理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [基于C++11新特性手写线程池实现](https://blog.csdn.net/m0_70418130/article/details/126805390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值