2021-04-18

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 { function body }
      • ✓capture list:捕获外部变量列表
      • ✓params list:形参列表,不能使用默认参数,不能省略参数名
      • ✓ mutable:用来说用是否可以修改捕获的变量
      • ✓ exception:异常设定
      • ✓return type:返回值类型
      • ✓function body:函数体
    • 有时可以省略部分结构
    • ✓[capture list] (params list) -> return type {function body}
    • ✓[capture list] (params list) {function body}
    • ✓[capture list] {function body}
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 {

    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容