day19_C++新特性
C++11新特性
-
auto
- 可以从初始化表达式中推断出变量的类型,大大简化编程工作
- 属于编译器特性,不影响最终的机器码质量,不影响运行效率
int a = 10; int b = 20; auto p = [a] () mutable { a++; cout << "lambda - " << a << endl; }; p();
-
decltype
- 可以获取变量的类型
-
nullptr
- 可以解决NULL的二义性问题
Lambda表达式
- Lambda表达式
- 有点类似于JavaScript中的闭包、iOS中的Block,本质就是函数
- 完整结构: [capture list] (params list) mutable exception-> return type
- ✓capture list:捕获外部变量列表
- ✓params list:形参列表,不能使用默认参数,不能省略参数名
- ✓ mutable:用来说用是否可以修改捕获的变量
- ✓ exception:异常设定
- ✓return type:返回值类型
- ✓function body:函数体
- 有时可以省略部分结构
- ✓[capture list] (params list) -> return type
- ✓[capture list] (params list)
- ✓[capture list]
int (*p)(int, int) = [](int a, int b) -> int {
return a + b;
};
cout << p(10, 20) << endl;
cout << [](int a, int b) -> int {
return a + b;
}(10, 20) << endl;
cout << [](int a, int b) {
return a + b;
}(10, 20) << endl;
// 默认情况是值捕获
auto p = [=, &a] {
cout << a << endl;
cout << b << endl;
};
a = 11;
b = 22;
p();
int a = 10;
int b = 20;
auto p = [a] () mutable {
a++;
cout << "lambda - " << a << endl;
};
p();
mutable 相当于a有个临时变量
C++ 17
if (int a = 10; a > 5) {
}
else if (int b = 20; b > 10) {
}
else if (2) {
}
else {
}