lambda表达式

lambda表达式可以构造一个闭包,能够捕获当前作用域变量的无名函数对象。

使用lambda可以就地的定义一个目标函数,不需要额外的再写一个命名函数或者函数对象

  • 函数对象:在类中重载函数调用符(),此时类的对象就能像普通函数一样调用,因此取名为函数对象,同时它也可以称之为仿函数。如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;

class A{
public:
A(int _a, int _b):a(_a),b(_b){}

int operator() (){ //重载() 运算符
cout<<"a = "<<a<<" b = "<<b<<endl;
return a + b;
}
private:
int a;
int b;
};

int main()
{
A a(4, 6);
cout<<a()<<endl; //对象可以像普通函数一样使用
return 0;
}

final 与 override关键字

final关键字

指定某个虚函数不能在派生类中被覆盖,或者指定某个类不能被派,主要作用在于防止虚函数无意的重写。

预置与弃置函数

在定义函数时尾部带**=delete表示该函数为弃置函数,任何使用弃置函数的地方都为非良构的,即编译器无法编译通过,带=default**表示该函数为预置函数。

auto关键字&decltype关键字

auto&decltype关键字用于进行类型推导,使其在编译期就能推导出变量或者表达式的类型。

  • auto: 让编译器在编译期间推导出变量类型,通过 = 右边的类型推导出 = 左边的变量类型。
    • 对于变量,指定要从它的初始化器自动推导出它的类型。
    • 对于函数,指定要从它的 return 语句推导出它的返回类型。(ps: C++14起)
    • 对于非类型模板形参,指定要从实参推导出它的类型。(ps: C++17起)
  • decltype: 相比于auto,decltype用于推导表达式类型。检查实体的声明类型,或表达式的类型和值类别。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×