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 {

	}
posted @ 2021-04-24 09:45  AAAAAAAAA123123  阅读(66)  评论(0编辑  收藏  举报