• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2022-01-05 20:12 Aet 隐藏边栏 |   抢沙发  6 
文章评分 4 次,平均分 5.0

新的改变

nullptr

  1. 在C++11中,nullptr是一个所谓“指针空值类型”的常量。
  2. nullptr类型数据所占用的内存空间大小和void*是相同的。
  3. nullptr和(void*)0
    1. 前者是一个编译时期常量
    2. 后者只是一个强制转换表达式,返回的也是一个void*指针类型。

nullptr_t

  1. 指针空值类型被命令为nullptr_t
  2. C++11严格规定了数据间的关系:
    1. 所有定义为nullptr_t类型的数据都是等价的,行为也完全一致。
    2. nullptr_t类型数据可以隐式转换成任意一个指针类型。
    3. nullptr_t类型数据不能转换为非指针类型,即使使用reinterpret_cast<nullptr_t>()的方式也不可以。
    4. nullptr_t类型数据不适用于算术运算表达式。
    5. nullptr_t类型数据可以用于关系运算表达式,但仅能与nullptr_t类型数据或者指针类型数据进行比较,当前仅当关系运算符为==,<=,>=等时返回true。

=default

  1. 显式缺省函数

=delete

  1. 删除函数

lambda

  1. 在数理逻辑或计算机科学领域中,lambda被用来表达一种匿名函数。
    这种匿名函数代表了一种所谓λ演算。

  1. 默认情况下,lambda总是一个const函数,但是加了mutable,就可以对类成员变量进行操作了。
  2. 可调用对象
    1. 函数
    2. 函数指针
    3. lambda表达式
    4. bind创建的对象
    5. 重载了函数调用操作符的类
  3. lambda函数在C++11标准中是默认内联的。
  4. 值捕获和引用捕获
    1. 对于值捕获的方式来讲,传递的值在lambda定义的时候就是确定的了,值传递意味着位逐次拷贝
    2. 对于引用捕获的方式而言,捕获的值是在lambda调用的时候确定的。
  5. 捕获规则:
    1. [] 空捕获列表,lambda不能使用所在函数中的变量
    2. [names] names是一个逗号分隔的名字列表,都是lambda所在函数的局部变量
    3. [&] 隐式引用捕获方式,lambda中所使用的和来自所占函数的实体都采用引用的方式使用
    4. [=] 隐式值捕获方式,lambda体将拷贝所使用的来自所在函数的实体的值
    5. [&, identifier_list] identifier_list显式列出来的变量采用值捕获的方式,其他隐式捕获的变量都采用引用捕获的方式
      identifier_list的名字前面不能使用&
    6. [=, identifier_list] identifier_list显示列出来的采用引用捕获的方式,其他隐式捕获的变量都采用值捕获的方式
      identifier_list中的名字不能包括this,且这些名字必须使用&
  6. 从C++11标准的定义,lambda被定义为“闭包“的类,每个lambda表达式会产生一个闭包类型的临时对象(右值)。
  7. 对于函数指针,如果lambda表达式没有捕获任何变量,且函数函数指针的函数原型和lambda有着相同的调用方式,C++11标准允许lambda向函数指针的转换。

实际应用

数据对齐

  1. 对齐的数据在读写上会有性能上的优势。
  2. 可以使用alignof来查看数据的对齐方式。
  3. alignas是对齐描述符,它既可以接受常量表达式,也可以接受类型作为参数。
    1. 在使用常量表达式作为alignas的操作符的时候,其结果必须是2的自然数幂次作为对齐值。
    2. 对齐值越大,称其对齐要求越高;对齐值越小,称其对齐要求越低。
  4. C++11标准规定了一个”基本对齐值“:
    1. 一般情况下其值通常等于平台上支持的最大标准类型数据的对齐值(通常是long double)。
    2. 可以通过alignof(std::max_align_t)来查询其值。
  5. 对齐描述符可以作用于各种数据。
    1. 具体来说,可以修饰变量、类的数据成员等。
    2. 而位域以及用register声明的变量则不可以。
  6. C++11对于对齐的支持并不限于alignof操作符和alignas描述符。还有其他的:
    1. STL库里面还有std::align函数来动态地根据指定的对齐方式调整数据块的位置。
    2. aligned_storage
    3. aligned_union

通用属性

__attribute__

  1. 可为程序中的函数、变量和类型设定一些额外信息。

__declspec

  1. 用于指定存储类型的扩展属性关键字。

C++11通用属性

  1. [[attribute-list]]

unicode

C++11unicode

  1. char16_t
    1. 用于存储UTF-16编码的unicode数据
  2. char32_t
    1. 用于存储UTF-32编码的Unicode数据
  3. 前缀
    1. u8:表示UTF-8
    2. u:表示UTF-16
    3. U:表示UTF-32

codecvt

  1. codecvt是一个模板类,从功能上,是一种能够完成当前locale下多字符编码字符串到多种Unicode字符编码转换的facet。

原生字符串字面量

弃用特性

  1. auto关键字
    1. 标识具有自动存储期的局部变量
  2. export
    1. 关键字被保留,但不包含任何语义
  3. register
    1. 原来是将变量存放在寄存器中
    2. 现在是声明存储类的关键字
  4. auto_ptr

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享