zoukankan      html  css  js  c++  java
  • C++11新标准

    1. 新类型

    long long和unsigned long long;

    char16_t 和 char32_t;

    新增原始字符串;

    2. 统一的初始化

    C++11扩大了用大括号括起的列表(初始化列表)的适用范围,使其可以用于所有内置类型和用户定义的类型(即类对象)。

    使用初始化列表时,可添加 “=”,也可不添加。

    int x = { 5 } ;

    double y = { 2.75 } ;

    short quar [ 5 ]  { 4 , 5 , 2 , 76 , 1 } ;

    另外,列表初始化语法也可用于new表达式中:

    int * ar = new int [ 4 ]  { 2 , 4 , 6 , 7 } ; // C++11

    创建对象时,也可使用大括号(而不是圆括号)括起的列表来调用构造函数:

    class Stump {

      private:

        int roots ;

        double weight ;

      pubilc:

        Stump ( int r , double w ) : roots ( r ) , weight ( w ) { }

    } ;

    Stump s1 { 3 , 15.6 } ; // oid style

    Stump s2 { 5 , 43.4 } ; // C++11

    Stump s3 { 4 , 32.1 } ; // C++11

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

    1. 缩窄

    2. std::initializer_list

    C++11提供了模板类initializer_list,可将其用作构造函数的参数。

    如果类有接受initializer_list作为参数的构造函数,则初始化列表语法就只能用于该构造函数。列表中的元素必须是同一类型或可转换为同一类型。

    3. 声明

    3.1 auto

    C++11将auto用于实现自动类型判断。这要求进行显示初始化,让编译器能够将变量的类型设置为初始值的类型。

    auto maton = 112 ; // maton is type int 

    auto pt = &maton ; // pt id type int *

    double fm ( double , int ) ;

    auto pf = fm ; // pf is type double (*) (double , int )

    关键字auto还可简化模板声明。

    例:
    如果 il 是一个std::initializer_list<double>对象,则可将下述代码:

    for ( std :: initializer_list < double > :: iterator p = il.begin() ; p != il.end() ; p++ )

    替换为如下代码:
    for ( auto p = il.begin() ; p != il.end() ; p ++ )

    3.2 decltype

    关键字decltype将变量的类型声明为表达式指定的类型。

    e.g.

    int j = n ;

    double x ;

    decltype ( x*n ) q ; // q same type as x*n , i.e. , double 

    decltype ( &x ) pd ; // pd same type as &x , i.e. , double *

    3.3 返回类型后置

    doubel f1 ( double , int ) ; // traditi0nal syntax

    auto f2 ( double , int ) -> double ; // new syntax , return type is double 

    可以配合3.2的decltype来指定模板函数的返回类型。

    template < typename T , typename U >

    auto eff ( T t , U u ) -> decltype ( T*U ) { }

    3.4 模板别名:using =

    typedef std :: vector < std :: string > :: iterator itType ; // old

    using itType = std :: vector < std :: string > :: iterator ;

    using 可以用于模板具体化, 但typedef不能。

    3.5 nullptr指针

    空指针

    4. 智能指针

    如果在程序中使用new从堆(自由存储区)分配内存,等到不再需要时,应使用delete将其释放。

    C++引入了智能指针auto_ptr,以帮助自动完成这个过程。

    C++11摒弃了auto_ptr并新增了unique_ptr,shared_ptr和weak_ptr。

    5. 异常规范方面的修改

    添加关键字noexcept

    6. 作用域内枚举

    7.对类的修改

    允许构造函数被继承和彼此调用。

    7.1 显示转换运算符

    8. 模板和STL方面的修改

    8.1 基于范围的for循环

    double  prices [ 5 ] = { 4.99 , 10.99 , 6.87 , 7.99 , 8.49 } ;

    for ( double x : prices )

      std :: cout << x << std :: endl ;

    8.2 新的STL容器

    forward_lsit // 单向链表

    unordered_map

    unordered_multimap

    unordered_set

    unordered_multiset

    8.3 新的STL方法

    cbegin ( ) 和 cend ( )

    8.4 valarray升级

    8.5 摒弃export

    8.6 尖括号

    C++11不在要求在声明嵌套模板时使用空格将尖括号分开

    9. 右值引用

     

  • 相关阅读:
    Git简介
    git 目录
    版本控制系统介绍
    python 爬虫 基于requests模块发起ajax的post请求
    python 爬虫 基于requests模块发起ajax的get请求
    POJ 2575
    POJ 2578
    POJ 2562
    POJ 2572
    POJ 2560
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/8836126.html
Copyright © 2011-2022 走看看