C++11有很多新特性,标准分为核心语言部分和库部分,库部分在书中没有讲,书名是《深入理解C++11:C++11新特性解析与应用》
实际上库部分在讲语言的时候一定会涉及,下面是列出的所有新特性,比较重要常用的我用红线标出
上面是中英文对照,下面是根据C++的使用者对这些特性的区分,重点是所有人和类作者比较关注的特性,也是使用最多的特性
上面提到书里主要讲的是核心语言部分,而下面很重要的库部分多多少少都会用到,需要额外学习
第2章 保证稳定性和兼容性
2.1 保持与C99兼容
C++有一个很重要的特点就是兼容C,而C++第一个标准C++98却早于C99,且C++03没有完全兼容C99,因此有以下特性在C++11中得到补充:
2.1.1 预定义宏
2.1.2 __func__预定义标识符
这个预定义标识符的作用就是存所在函数的名字:
VisualAssistX2022破解下载 VAX番茄助手Visual Assist X 10.9.2488 for VS2022 汉化破解版(附key+方法) 64位 下载-脚本之家
这里破解了一下VS。。。没有括号补全太难受了
2.1.3 _Pragma操作符
和#pragma预处理指令功能相同,由于它是操作符,所以可以用在宏里
2.2 long long整型
可以看到long long在我的64位机器上占8字节=64位
2.3 扩展整型
时常会见到右边这种扩展类型,实际上还是标准类型,只不过是别名(VS环境中stdint.h)
2.4 宏__cplusplus
解决Visual Studio设置C++标准 但是_cplusplus始终为199711-CSDN博客
VS对这个宏有特殊处理,所以在我的C++20标准中还是199711的值
理论上C++11中这个宏的值为201103L
2.5 静态断言
2.5.1 运行时与预处理时
运行时断言就是assert宏,迫使条件不为真时程序退出
预处理断言为#error,见得较少
2.5.2 静态断言与static_assert
static_assert为编译期断言,如果有不符合逻辑的地方程序将无法编译通过
2.6 noexcept
声明函数不会抛出异常,替代了之前的throw(),如果noexcept函数抛出了异常,程序会直接终止,调用std::terminate()而不是捕获异常这种带来额外开销的东西
常量表达式的结果被认为是bool,如果bool值为true则函数不会抛出异常
我的理解应该是异常不是一个高效的程序错误处理机制,不然不会想尽办法减少异常的产生与扩散