本文的主要内容来源:
http://www.softwarequalityconnection.com/2011/06/
the-biggest-changes-in-c11-and-why-you-should-care/
C++在2003年的库技术报告1(TR1)论坛上经历了重大改变,TR1包括新的
容器类 (unordered_set,unordered_map,unordered_multiset和
unordered_multimap)和多个支持正则表达式、元组和函数对象封装器
等的新库。随着C++11标准的批准,TR1和自它以来新增的库
都被正式合并进入标准C++标准,以下是 C++11标准库的一些特性:
线程库:
毫无疑问的,从程序员的角度来看,C++11最重要的新功能是并发,
C++11有一个代表执行线程的线程类,
promises and futures是在并行环境
中用于同步的对象,
async()函数模板启动并发任务,
thread_local存储类型
声明线程独有( thread-unique)的数据。如果你想快速浏览C++11线程库,
请阅读 Anthony William的“C++0x中更简单的多线程”,链接如下:
http://www.devx.com/SpecialReports/Article/38883新智能指针类:
C++98只定义了一个智能指针类
auto_ptr,它现在已经被弃用了。
C++11包括新的智能指针类
shared_ptr和最近添加的
unique_ptr,
这两个都兼容其它标准库组件,所以你可以在标准容器内安全保存这些智能指针,
并且用标准算法操作它们。
新算法:
C++11标准库定义了新的算法all_of(),any_of()和none_of()来模拟集合操作,
下面列出的内容在(first, first+n)范围内使用断言ispositive()和
all_of(),any_of() and none_of()这些算法来检查该范围内的属性:
#include <algorithm>
//C++11 code
//are all of the elements positive?
all_of(first, first+n, ispositive()); //false
//is there at least one positive element?
any_of(first, first+n, ispositive());//true
// are none of the elements positive?
none_of(first, first+n, ispositive()); //false
新增一种copy_n算法,使用copy_n()函数,复制一个包含5个元素的数组
到另一个数组是很容易的事:
#include <algorithm>
int source[5]={0,12,34,50,80};
int target[5];
//copy 5 elements from source to target
copy_n(source,5,target);
算法iota()创建了一个值顺序递增的范围,这好像是分配了一个初始值给*first,
然后使用++前缀来使值递增。在下面的代码中,iota()分配连续值{10,11,12,13,14}
给数组arr,并将{‘a’,’b’,’c’}分配给char数组c。
include <numeric>
int a[5]={0};
char c[3]={0};
iota(a, a+5, 10); //changes a to {10,11,12,13,14}
iota(c, c+3, 'a'); //{'a','b','c'}
C++11仍旧缺少一些有用的库,比如XML API,套接字,GUI,反射和
一个合适的自动垃圾回收器。但C++11也提供了很多的新特性, 这些让C++变得更加
安全,高效(是的,甚至比目前更高效,请参考 Google's benchmark tests),易学易用。
如果C++11的变化看起来太大,不要被吓坏了。花些时间来逐步消化这些变化。
最后,你可能就会同意Stroustrup的说法:
C++11感觉就像一个新语言,一个更好的新语言。
评论