1.预定义标识符
__fun__ 返回所在函数名字
#pragma _Pragma 将预处理指令升级为操作符。
... __VA_ARGS__ 边长参数定义
long long
nullptr 代替NULL 解决二义性问题。
通过{},.快速初始化成员变量&变量初始化,静态成员变量无法用该方法。
int arr[] {1,4,5,7}
2.新特性以及关键字
final 禁止重写
override 保证重写了父类的函数
const 函数内不能改变类中字段。
using base::fun 继承基类中的重载函数
using base::base 继承基类中的构造函数,但是其只初始化基类的变量。
委派构造函数
class info{
public:
info();
info(int i):info(){this.i=i;} 初始化列表和委派构造函数不能共存
private:
int i
}
3.左值与右值讨论
左值:有地址,可以引用和地址
右值:临时的,没有地址和引用(将亡值)
std::move 强制左值转右值(可理解成删除原变量,赋予新变量)
4.类型相关
auto 变量类型自动推导
decltype 以表达式为参数,获得变量类型
typeid(?).name 打印变量名
5.增强for循环:
for(auto item: array){
std::cout<<item;
}
6.智能指针:
// 管理指针的创建与释放。
#include <memory>
auto_ptr
unique_ptr
share_ptr
weak_ptr
7.多线程相关,原子变量、原子操作
#include <mutex>
#include <thread>
#include <atomic>
8.lambda函数:面向函数的编程
[capture](parameters)->return-type{statement;}; 语法
[](int x, int y)->double{return x+y*1.0;}; 示例
[]{}; 最简单的lambda表达式
[var] 传值方式获得var
[=] 传值方式获得所有变量
[&] 传引用方式获得所有变量
[&var] 传引用方式获得var
[this] 值方式获得当前this指针
[=,&a,&b] 可以组合使用,但是组合不得造成变量重复。
其他
9.alignas(32) 指定对其bit数目。
R"(xxxxx)" 原生字符串,避免使用转义。