1.在函数中声明中或定义中,可设置参数的默认值.(不可同时存在).
若多个参数,前面一个设置了默认值,则后面的参数也要设置默认值(缺省值).
void add(int a,int b = 10);
2.匿名函数(匿名表达式) lambda
std::function<void()> func = [](){ _score++;};
[] //未定义变量.试图在Lambda内使用任何外部变量都是错误的.
[x, &y] //x 按值捕获, y 按引用捕获.
[&] //用到的任何外部变量都隐式按引用捕获
[=] //用到的任何外部变量都隐式按值捕获
[&, x] //x显式地按值捕获. 其它变量按引用捕获
[=, &z] //z按引用捕获. 其它变量按值捕获
3.函数后面加冒号,初始化成员变量.
void A(int a, int b) : _a(a), _b(b){
}
相当于
void A(int a, int b){
_a = a;
_b = b;
}
构造函数
A() : _a(0), _b(0){
}
相当于
A(){
_a = 0;
_b = 0;
}
4.类型转换
类指针或引用的上行转换static_cast 和 dynamic_cast 都可以
类指针或引用的下行转换用dynamic_cast并且判断转换后是否为空
基本数据类型之间的转换用static_cast, 但是由于数值范围的不同,需要用户保证转换的安全性
不同类型之间的指针或引用的转换用reinterpret_cast,它的本质是对指向内存的比特位的重解释
消除数据的const、volatile、__unaligned属性,用const_cast