• C++11的新特性


    1.

    auto自动变量(vs 2010支持)

    2.

    C++11新增模板类array

    C++11支持对模板类vector的列表初始化。

    3. 

    C++11新增了另一种引用,右值引用,是使用&&声明的:

    double j = 15.0;
    double && jref = 2.0*j + 18.5; //不能使用double &声明jref

    4. 

    C++11中模板函数的改善

    (1). C++11新增了关键字decltype,解决模板函数中类型定义的问题。

    template<class T1, class T2>
    void ft(T1 x, T2 y)
    {
      ...
      decltype(x+y) xpy = x+y;  
      ...    
    }

    (2). C++11后置返回类型。

    auto h(int x, float y) -> double
    {/*function body*/}

    其中auto是一个占位符,表示后置返回类型提供的类型。

    5. C++11提供【线程存储持续性】的方案来存储数据

    如果变量是使用关键字thread_local声明的,则其生命周期与所属线程一样长。

    6. 

    初始化动态分配的常规结构或数组(需要用大括号)

    struct where 
    {
        double x;
        double y;
        double z;     
    }
    
    where* pi = new where {28.1, 33,4, 52.1};//C++11
    
    int *pj = new int [3] {1, 2, 3};//C++11

    同样,列表也可用于单值初始化。

    7. 

    C++11中,可将列表初始化运用到类(就像应用于结构和数组那样)。

    //若Stock类的构造函数声明如下(此处有默认参数):
    Stock::Stock(const std::string & co, longn = 0, double pr = 0.0);
    
    //则Stock类的对象可以用列表初始化:
    Stock hot_tip = {"apple", 1000};

     C++11提供了名为std::initialize_list的类,可将其作为函数参数或方法参数的类型。

    8. 

    在C++98中只能使用这种技术声明值为整数或枚举的静态常量,而不能存储double常量。(但C++11消除了这个限制)

    9.

    C++11提供了一种新的枚举——作用域内枚举(其枚举的作用域为类):

    enum class egg {Small, Medium, Large};// or enum struct egg {Small, Medium, Large};

    可以使用作用域解析运算符访问枚举成员。

    枚举类成员不能像常规枚举一样,隐式地转换为某种底层整型类型(提高了作用域内枚举的类型安全),但可以进行强制类型转换。.

    C++11 可以选择底层整型类型(默认为int):

    enum class : short egg {Small, Medium, Large};//:short将底层整型类型指定为short

     10.

    在C++98中,关键字explicit不能用于转换函数,但C++11消除了这个限制,在C++11中可将转换运算符声明为显式的。

    11.

    C++11新增关键字nullptr来表示空指针。(VS 2010支持)

    12.

    C++11允许类内初始化

    class Classy
    {
      int mem1 = 10;//类内初始化
      const int mem2 = 20;//类内初始化    
      //...  
    };
    
    //等价于成员初始化列表
    Classy::Classy() : mem1(10), mem(20) 
    {
     ...       
    }
    
    //C++11类内初始化过的类,覆盖成员函数的默认值
    Classy::Classy(int n) : mem1(n) 
    {
     ...       
    }

     13.

    禁用默认函数的方法:

    1. 将函数声明为私有的;

    2. C++11 使用关键字delete实现。

    14.

    C++11新增了一项功能——使用模板提供一系列别名:

    template<typename T>
        using arrtype = std::aray<T, 12>;
    
    //模板别名arrtype的使用
    arrtype<int> days;

    C++11还支持可变参数模板

  • 相关阅读:
    【Java】IO流--文件夹的复制
    【Java】IO流--序列化与反序列化
    【Java】Java中的数组是对象吗?(转载)
    【Java】Java漫谈-数组(转载)
    【Java】IO流--对象流--ObjectInputStream、ObjectOutputStream
    【Java】IO流--数据流--DataInputStream、DataOutputStream
    【Java】IO流--打印流--PrintStream
    【Java】IO流--转换流--InpuStreamReader、OutputStreamWriter
    CentOS快速安装Nginx的方法,nginx如何启动重启停止
    Mac查看端口号是否被占用及释放
  • 原文地址:https://www.cnblogs.com/sungnox/p/7588073.html
Copyright © 2020-2023  润新知