自动识别类型
//自动识别类型
auto a = 5.6;
//decltype取类型
decltype(a) b = 5;
专用空指针nullptr
auto p = new int();
//空指针
p = nullptr;
cout << p<< endl;
快速遍历
//快速遍历
int array[] = { 11,22,33,44,55,66 };
for (int item : array)
{
cout << item << endl;
}
更加简洁的初始化方式
int array1[]{ 11,22,33,44,55,66 };
Lambda表达式
Lambda表达式是一个匿名函数(把函数名用[ ]代替),一般用一个指向函数的指针指向函数,方便调用
void (*p2)() = []() {
cout << "lambda func()" << endl;
};
p2();
简单的操作是直接用auto
auto p1 = [] (){
cout << "lambda func()" << endl;
};
p1();
有返回值时
auto p3 = [](int a, int b) ->int{
return a + b;
};
cout << p3(10, 20) << endl;
直接调用的写法,qt中的connect常用到Lambda表达式
([]() {
cout << "lambda func()----------------p2" << endl;
});
捕获外部值,写在[ ]里面,或者写=
([a,b]() {
cout << "lambda func() = "<<a+b << endl;
});
捕获外部地址里面的值,上面的捕获方式是a=10,就把10传进去,a=20也不会引起输出改变,而下面的方式是从地址取值,a变成20,捕获的值就变成20了,当然也可以认为是引用
([&a,b]() {
cout << "lambda func() = "<<a+b << endl;
});
关键字:mutable,值捕获时可以对表达式内部的值进行改变
int a = 1;
([a]() mutable{
a++;
cout << "a = "<<a << endl;
});
可省略的写法:1.可以不写返回值类型 2.没有输入参数时,可以不写小括号