C++11 新特性

总结C++11新特性的功能用法和注意事项

  • auto
    功能:类型说明符,用于自动获取表达式所属的类型
  • long long 类型
    C++语言规定,一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大
  • 列表初始化
    用花括号来初始化变量
  • 空指针 nullptr
    特殊类型的字面值,可以转换为任意指针类型;
    C++程序最好使用nullptr,尽量避免使用NULL;
  • constexpr 变量
    constexpr声明的变量由编译器来验证变量值是否是一个常量表达式;
    constexpr声明的变量一定是一个常量,而且必须用常量表达式初始化;
    constexpr声明的类型为字面值类型(算术,引用 和指针),自定义、IO库,string类型不属于。
    constexpr指针初始值必须是nullptr或0,或是固定地址的对象(函数体之外的对象)
  • 类型别名using
  • decltype 类型指示符
    选择并返回操作数的数据类型
  • 类内初始化
    初始化和赋值不同,一个是没值,一个是有值
  • 范围for
    遍历给定序列中的每个元素并对序列中的每个值执行某种操作
  • vector对象的vector
  • vector对象列表初始化
  • 容器的cbegin和cend函数
    类似于begin和end,只是返回的是const_iterator
  • 函数begin和end
    和容器功能类似,以数组为参数
  • 除法舍入规则
    商一律向0取整(直接切除小数部分)
  • sizeof用于类成员
    使用作用域运算符来获取类成员的大小,sizeof运算符无须提供一个具体的对象。
  • initializer_list类
    标准库类型,用于表示某种特定类型的值的数组
  • 列表初始化返回值
    函数可以返回花括号包围的值的列表
  • 尾置返回类型
    较适用于返回类型比较复杂的函数(数组的指针或数组的引用)
  • constexpr函数
    能用于常量表达式的函数:函数返回类型及所有形参的类型都得是字面值类型;函数体必须有且只有一条return语句
  • =default 生成默认构造函数
    通过在参数列表后面写上=default,要求编译器生成构造函数。可以和声明一起出来在类的内部(内联),也可以作为定义出现在类的外部。
  • 类对象成员类内初始化
  • 委托构造函数
    使用它所属类的其他构造函数执行它自己的初始化过程(把它职责委托给了其他构造函数)
  • constexpr构造函数
    符合构造函数要求(没有返回语句),符合constexpr函数要求(拥有唯一可执行语句就是返回语句),一般函数是空的。可声明=default或=delete
  • 用string对象处理文件名
    IO参数可以使用库类型string的对象
  • array和forward_list容器
    与内置数组相比,array是一种更安全、更容易使用的数组类型;array对象的大小是固定的,不支持添加和删除元素以及改变容器的大小操作。
    forward_list目标是达到与最好手写的单向链表数据结构相当的性能,没有size操作
  • 容器的cbegin和cend函数
    无论容器元素是否是常量,返回值都是const_iterator
  • 容器的列表初始化
  • 容器的非成员函数swap
    swap操作交换两个相同类型容器的内容。调用后,元素交换(本身未交换,只是交换了两个容器的数据结构)
  • 容器insert成员的返回类型
    insert返回指向第一个新加入元素的迭代器,如果范围为空,不插入任何元素,insert操作会将第一个参数返回。
  • 容器的emplace成员的返回类型
    emplace_front,empace和emplace_back 操作构造元素(相对于push或insert拷贝),对应push_front,insert和push_back,将元素旋转在容器的头部、一个指定位置之前或窗口尾部
  • shrink_to_fit
    适用于vector,string和deque,capacity和reserve只适用于vector和string
  • string的数值转换函数
  • lambda匿名函数
    可调用对象(callable object)(函数,函数指针,重载运算符的类,lambda表达式)
    lambda:未命名的内联函数,可定义在函数内部
  • 标准bind
    在functional文件中定义,通用的函数适配器,接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表

     

待续…

汇总自:C++Primer 第五版