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. 右值引用

C++11新标准的更多相关文章

  1. C++11新标准学习

    <深入理解C++11:C++11新特性解析与应用> <华章科技:深入理解C++11:C++11新特性解析与应用>一共8章:第1章从设计思维和应用范畴两个维度对C++11新标准中 ...

  2. C++11新标准:nullptr关键字

    一.nullptr的意义 1.NULL在C中的定义 #define NULL (void*)0 2.NULL在C++中的定义 #ifndef NULL #ifdef __cplusplus #defi ...

  3. C++11新标准:decltype关键字

    一.decltype意义 有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(如果要初始化就用auto了).为了满足这一需求,C++11新标准引入了decltype类型 ...

  4. C++11新标准:auto关键字

    一.auto意义 编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型,然后要做到这一点并非那么容易.为了解决这个问题,C++11新标准引入了auto类型说明符,用它就能 ...

  5. c++11新标准for循环和lambda表达式

    :first-child { margin-top: 0px; } .markdown-preview:not([data-use-github-style]) h1, .markdown-previ ...

  6. 关注C++细节——C++11新标准之decltype的使用注意

    c++11新特性--decltype decltype是C++11加入的一个新的keyword,目的是选择并返回操作数的数据类型,重要的是,在此过程中编译器分析表达式并得到它的类型,却不实际计算表达式 ...

  7. 基于c++11新标准开发一个支持多线程高并发的网络库

    背景 新的c++11标准出后,c++语法得到了非常多的扩展,比起以往不论什么时候都要灵活和高效,提高了程序编码的效率,为软件开发者节省了不少的时间. 之前我也写过基于ACE的网络server框架,但A ...

  8. C++ 11新标准实现POJ No.1002-487-3279

    487-3279(重复的电话号码查询)(标签:优先队列,哈希表) 题目描述 企业喜欢用容易被记住的电话号码.让电话号码容易被记住的一个办法是将它写成一个容易记住的单词或者短语.例如,你需要给滑铁卢大学 ...

  9. C++ 11新标准实现POJ No.1001-Exponentiation

    Exponentiation(高精度幂计算)(标签:链表,字符串,快速幂计算) 题目描述 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要你解 ...

随机推荐

  1. c#命名规则参考

    命名规则参考:1.从组件类型名中移去T前缀.例如TButton变成Button.2.除了第一个元音,删去所有元音字母.例如,Button变成bttn,Edit变成edt.3.压缩双字母.例如,bttn ...

  2. Flask框架的学习与实战(三):登陆管理

    继续flask的学习之旅.今天介绍flask的登陆管理模块,还记得上一篇中的blog小项目么,登录是咱们自己写的验证代码,大概有以下几个步骤: 1.在登录框中输入用户名和密码 2.flask view ...

  3. Linux 创建Bridge

    安装Bridge工具软件包 Linux可以工作在网桥模式,必须安装网桥工具bridge-utils,运行命令: yum install bridge-utils 或 apt-get install b ...

  4. LINQ 学习路程 -- 查询操作 OrderBy & OrderByDescending

    Sorting Operator Description OrderBy 通过给定的字段进行升序 降序 排序 OrderByDescending 通过给定字段进行降序排序,仅在方法查询中使用 Then ...

  5. iOS App被拒原因以及解决方案总结。

    Guideline 1.2 - Safety - User Generated Content Your app enables the display of user-generated conte ...

  6. JAVA发送手机短信

    <p><span>JAVA发送手机短信,流传有几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册 ...

  7. Jquery 取值,赋值学习总结

    <h2>获取和设置文本框值:</h2> <input type="button" value="赋值文件框" id="v ...

  8. hdu-5861 Road(并查集)

    题目链接: Road Time Limit: 12000/6000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Pro ...

  9. windows中android SDK manager安装更新sdk很慢,或者出现Done loading packages后不动甚至没有任何可用包

    出现问题: 1.windows中android SDK manager安装更新sdk很慢,或者出现Done loading packages后不动甚至没有任何可用包 2.Failed to fetch ...

  10. C++ 播放音频流(PCM裸流)

    直接上代码,如果有需要可以直接建一个win32控制台程序然后将代码拷过去改个文件名就可以用了(注意将声道和频率与你自己的文件对应哦).当然我自己也用VS2008(VS2013好用太多,强烈推荐还是用V ...