c++2.0新特性-候捷系

目录

Big-Three 到 Big-five以及他们的delete和default

Type Alias

类型推导(decltype)

Lambda 

你的打赏是我奋笔疾书的动力!​


这里先录入部分新特性,以后学到再把剩余的添上。主要以候捷前辈ppt的展出形式学习,如果触犯了相关“法律”,告知我,删立决。

Big-Three 到 Big-five以及他们的delete和default

三大“巨头”函数分别为拷贝构造函数、拷贝赋值函数和析构函数,然后11-14增加到5个“巨头”函数,增加的另外2个是:构造函数、普通函数。

我想上面的图已经很清楚地描述了Big-five的default和delete使用情况。 

Type Alias

Typedef 可以使用using关键字替换。

图中的注释:使用Type Alias的定义和使用typedef的定义没有什么不同,并且Type Alias这种定义可以出现在{}域、类域、命名空间域中。

所以using不仅可以用于替代Typedef,还能像下图中那样使用。

图中展示了using的3类用途:1.某个文件中的使用到了某个命名空间的好多成员,或者一个成员,可以用using声明一下。2.某个类中使用到了某个命名空间的成员。3.用于Type Alias类型别名和别名模板。

类型推导(decltype)

图释:推到一个表达式的类型,和typeof一个用途,而typeof不是c++的标准实现,所以c++2.0把decltype纳入了标准。它目前有3个用处,1.函数返回类型的声明,2.用于元编程,3.推导lambda表达式的类型。

用途1举例:

用途2举例:

图释:写这个模板的作者知道这个模板只能用于参数是容器类型的函数,所以传入非容器类型的参数会编译失败,因为decltype(obj)这个类型没有iterator这个inner type。

用途3举例:

Lambda 

先看一个中文的板书和例子。

是匿名函数,即没有函数名的函数。完整形式: [捕获外部变量列表 ] (参数列表) mutable exception->返回类型 { 函数体 },mutable:在外部变量列表以值来捕获时,无法修改变量的值,加上mutable表示可修改(不会影响外部变量) 。

auto i = 5;
// [&] 表示外部变量都以引用的形式在lambda中使用,函数内部修改i的值会影响外部
// 这里的 -> auto 自动推导在c++11不支持,c++14中对auto进行了扩展
thread t1([&] () -> auto {
	i = 100;
	cout << "线程:" << i  << endl;
});
_sleep(10);
cout << i << endl;
捕获形式说明
[]不捕获任何外部变量
[i, …]以值得形式捕获指定的多个外部变量(用逗号分隔);如果引用捕获,需要显示声明&
[this]以值的形式捕获this指针
[=]以值的形式捕获所有外部变量
[&]以引用形式捕获所有外部变量
[=, &x]变量x以引用形式捕获,其余变量以传值形式捕获
[&, x]变量x以值的形式捕获,其余变量以引用形式捕获

 开始候先生的板书:

图释:[]中可捕获的参数可以是pass by value or pass by refenrence;只要mutable、throwspec、->、retType有一个出现,则小括号(…)一定要出现;

举例如下图:

图释:Lambda其实等同于一个类,id是值传递。

继续观察下图中的例子:

编译器对lambda的处理如下图:

图释:虽然编译器可能如此处理lambda,但是lambda没有默认的构造函数()和赋值操作=。

你的打赏是我奋笔疾书的动力!

支付宝打赏:

微信打赏:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值