https://blog.csdn.net/jiange_zh/article/details/79356417
1.__ func __预定义标识符:
基本功能:return fund ;返回当前函数名称
2._Pragma操作符:
Pragma ( 字符串字面量 ) 向编译器传递额外信息
3.lambda表达式:
[ 函数对象参数 ] (操作符重载函数参数) mutable或exception声明 ->返回值类型 {函数体}
3.1[ ] 必须存在,分为几种类型:
·空 无函数对象参数
·= 可使用lambda函数体所在范围年内所有可见的局部变量(包括this),以传值方式进行
·& 可使用lambda函数体所在范围年内所有可见的局部变量(包括this),以传引用方式进行
·this 函数体内可使用lambda所在类中成员变量
·a 将a按值传递
·&a 将a按引用传递
·a,&b 将a按值传递,b按引用传递
·=,&a,&b 将a,b按引用传递,其余按值传递
·&,a,b 将a,b按值传递,其余按引用传递
3.2()如没有可以省略,其余则按照传值或传引用方式进行处理
3.3 mutable或exception声明,可省略。加上mutable后可修改传进来的拷贝(注意不是原始值);exception指定抛出的异常,可用catch(int)接收
3.4->返回值类型,当返回值为void或只有一处return时可省略
3.5{}函数体,不能省略,但可为空
4.nullptr:
nullptr为任意类型的空指针类型
传统意义上C++会直接将NULL定义为0,对不同的编辑器来说,有的会直接设置为0,有的会设置为((void*)0),因此可能会出现函数重载错误的情况,如下:
void fun(int a);
void fun(int *a);
int * b=NULL;
当调用fun(b)时部分编译器下会直接调用fun(int a)的形式,造成混乱,为了解决这种情况,C++11引入了nullptr,可以隐式转换为任何类型指针,以此区分NULL和0之间的混乱关系。
5.auto与decltype
使用auto可以让编译器自动推断当前变量类型(无法推导数组类型,无法作为函数传参类型)
用法:
vector<int>count(10,1);
for(auto k:count) //此处k为int型变量
由于auto关键字在推导类型时存在缺陷,因此引入了decltype关键字,用法和sizeof相似,为:decltype(表达式),返回值为类型,但是不进行计算
6.拖尾返回类型
在泛型函数中对返回值进行确认时直接使用decltype会发生错误,为了应对这一情况,C++11新增了拖尾型返回类型,用法如下:
template<typename T, typename U>
auto add(T x, U y) -> decltype(x+y) {
return x+y;
}
7.外部模板
传统C++中只要遇到了被完整定义的模板,便会直接进行实例化。C++11中进行了外部模板的引入,能够显式的告诉编译器何时进行模板的实例化。