c++11相比于c++03增加了约140个新特性。以及对c++03标准中约600个缺陷的修正。

2013年 GCC 4.8.1,这是该编译器由C实现转向C++实现(4.8版本)后的首次升级,也是第一个实现C++11所有语言特性的编译器。

cppreference.com
cppreference
The Boost C++ Libraries
c++11 vs boost

原Boost库 C++11新的特性或库
Move 右值引用
Thread thread
SmartPtr 新的标准库std::unique_ptr、std::shared_ptr、std::weak_ptr
Bind 新的标准库std::bind
Function 新的标准库std::function
Array 新的标准库std::array
BOOST_Lambda Lambda表达式
Regex C++11的regex
Random random
Tuple 新的标准库std::tuple
BOOST_FOREACH 基于Range的for循环替代。(序列for循环,有点像Python的for循环了)
Functional/Forward 新的标准库std::forward
Min-Max 新的标准库std::min、max、std::minmax_element
Ratio 新的标准库std::ratio
StaticAssert static_assert
Typeof auto, decltype,推断变量或表达式的数据类型
Valueinitialized List-initialization
EnableIf 新的标准库std::enable_if
MemberFunction 新的标准库std::mem_fn
Ref 新的标准库std::ref、std::cref
ResultOf 新的标准库std::result_of
Swap(swapping arrays) 新的标准库std::swap
TypeTraits type_traits
Unordered unordered_set、unordered_map

c++11 core features:

右值引用 && 语义转移 std::move

  • 右值引用的意义通常解释为两大作用:移动语义和完美转发。
  • C++中右值可以被赋值给左值或者绑定到引用。类的右值是一个临时对象,如果没有被绑定到引用,在表达式结束时就会被废弃。于是我们可以在右值被废弃之前,移走它的资源进行废物利用,从而避免无意义的复制。被移走资源的右值在废弃时已经成为空壳,析构的开销也会降低。
  • 右值中的数据可以被安全移走这一特性使得右值被用来表达移动语义。
  • 没有右值引用的时候,为避免临时对象的多余复制,和实现函数的完美转发,使了很多古怪手段,当有了右值引用,解决相同的问题,已经简单很多了。
  • 一句话答案:右值引用的出现是为了实现移动语义,顺便解决完美转发的问题,其意义在于扩充了值语义,帮助Modern C++可以全面地应用RAII。原因即在于C++独有的值语义:程序员通过值语义可以方便直观地控制对象生命期,让RAII用起来更自然。

lambda 允许捕获局部变量的局部函数,避免传递参数

RAII 资源获取即初始化

std::thread 使用很灵活 坑也容易多

std::thread + std::vector

  • 命名空间 namespace moreplus{}
  • RAII 资源即初始化
  • 多线程 线程安全
  • assert 断言 失效终止
  • 结构体构造函数初始化 no memset
  • 枚举类型数据
  • STL(vector,map…) BOOST(function/bind、shared_ptr、noncopyable)