• 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还支持可变参数模板

  • 相关阅读:
    mongodb 报错问题
    Android中Is library配置的作用
    Ubuntu 12.04 中安装和配置 Java JDK
    (转)Android开发把项目打包成apk
    (转)Android--使用Canvas绘图
    Android_Gallery(画廊)
    android组件
    Android中px dpi dip density densityDpi 的相关说明
    (转)Android中px与dip,sp与dip等的转换工具类
    (转)谈谈Android中的Rect类——奇葩的思维
  • 原文地址:https://www.cnblogs.com/sungnox/p/7588073.html
Copyright © 2020-2023  润新知