• C/C++ C++11新特性


    C++11中的11表示2011年的C++标准。

    1、右值引用(rvalue reference)和移动(move)语义

    1)作用:避免右值拷贝,而只是“移动”,减少拷贝开销。

    2)右值:没有名字,不能取地址,不能修改。左值和右值没有严格的定义。

    3)移动语义:

    2、constexpr(常量表达式)

    编译期 

    3、类型推断,通过auto和decltype两个关键字来实现。

    1)auto

    1.1)根据变量赋的值,推断变量的数据类型。

    auto i = 1; // i被自动推断为int类型 

    1.2)可以极大地简化长语句。

    vector<int> vec(6,10);
    // (1)
    vector<int>::iterator iter = vec.iterator();
    // (2) 简化写法
    auto iterAuto = vec.iterator();

    1.3)auto不能修饰函数形参。

    2)decltype

    4、Lambda表达式(匿名函数) 

    // Lambda表达式的格式
    [capture](params)->ret { body};
    

    1)capture:捕获的参数列表。

    [a, &b] // 表达式捕获a的值,以及b的引用。
    [this] // 捕获this指针。
    [&] // 捕获所有外部自动变量的引用。
    [=] // 捕获所有外部自动变量的引用。
    [] // 不捕获外部的任何变量。
    auto func = [](int i){return i+4;};
    func(10);           // 14

    5、nullptr(空指针),只表示指针(不是0),并且可以隐式转换成其他任何类型的指针。

    NULL是一个宏,值由编译器的具体实现决定。通常,C中是0或者(void*)0,C++中是0(因为void*不可以隐式转化成其他类型的指针)。

    // 函数重载
    void foo(int) {}     // #1
    void foo(char*) {}   // #2
    int main() {
        foo(NULL); // C++中调用#1
    }
    
    void foo(int) {}     // #1
    void foo(char*) {}   // #2
    int main() {
        foo(nullptr); // 调用#2
    }
    

      

    6、基于范围(range based)的for循环

    int arr[5] = {1, 2, 3, 4, 5};
    // 简化for循环的写法。引用是为了修改原值,可以不是引用。
    for(int &x : arr) 
    {
        x *= 2; 
    }

    7、初始化列表

    // 基本类型
    int x = {5}; // 可以不是数组
    double y {2.75}; // 可以不加等号
    short quar[4] {4, 5, 2, 1};
    int *arr = new int[4]{2, 4, 6, 7}; // 可以new
    // 自定义类型
    class Stump
    {
    private:
        int roots;
        double weight;
    public:
        Stump(int r, double w) : roots(r), weight(w) {}
    };
    
    Stump s1(3, 15.6); // 圆括号
    Stump s2{3, 15.6}; // C++11
    Stump s3 = {3, 15.6}; // C++11

    8、元组

    9、后置返回类型(tailing return type) 

    10、override和final 

    11、智能指针(smart pointer)

    https://www.cnblogs.com/yangwenhuan/p/10635102.html

    12、新增数据类型

    1)long long和unsigned long long:支持64位整型。

    2)char32_t和char16_t:

    3)原始字符串:

    13、类内成员初始化

    14、default和delete

    15、委托构造函数

    16、继承构造函数

    17、模板function 

    18、作用域内枚举

    19、模板别名

    20、可变参数模板

    21、POD、alignof()、alignas

    22、正则表达式

    std::move:让对象可以移动

    std::forward 

    std::array

    如果类有将模板std::initializer_list作为参数的构造函数,则只有该构造函数可以使用列表初始化形式。

    参考链接:

    https://en.wikipedia.org/wiki/C++11

    https://www.cnblogs.com/nothx/p/8523191.html

    https://blog.csdn.net/jiange_zh/article/details/79356417

  • 相关阅读:
    codeforces A. Chess Placing
    codeforces E. Cyclic Components
    poj1930(小数化分数)
    hdu4497 (正数分解定理+排列组合)
    cf 466 div.2 A. Points on the line
    hdu1576(扩展欧几里得求逆元板子)
    逆元(转载)
    stiring 数..........
    逆元
    矩阵 构造 模板
  • 原文地址:https://www.cnblogs.com/yangwenhuan/p/12218143.html
Copyright © 2020-2023  润新知