C++11中的11表示2011年的C++标准。
1、右值引用(rvalue reference)和移动(move)语义
1)作用:避免右值拷贝,而只是“移动”,减少拷贝开销。
2)右值:没有名字,不能取地址,不能修改。左值和右值没有严格的定义。
3)移动语义:
2、constexpr(常量表达式)
编译期
3、类型推导,通过auto和decltype两个关键字来实现。
1)auto
1.1)auto不能修饰函数形参。
2)decltype
4、Lambda表达式
5、nullptr(空指针),只表示指针(不是0),并且可以隐式转换成其他任何类型的指针。
NULL是一个宏,值由编译器的具体实现决定。通常,C中是0或者(void*)0,C++中是0(因为void*不可以隐式转化成其他类型的指针)。
// 函数重载 void foo(int) {} // #1 void foo(char*) {} // #2 int main() { foo(NULL); // C++中调用#1 }
void foo(int) {} // #1 void foo(char*) {} // #2 int main() { foo(nullptr); // 调用#2 }
6、基于范围(range based)的for循环
int arr[5] = {1, 2, 3, 4, 5}; for(int &x : arr) { x *= 2; }
7、列表初始化
8、元组
移动语义
减少拷贝性能开销。
移动构造函数
std::move:让对象可以移动
std::forward
std::array
auto_ptr
unique_ptr
参考链接:
https://en.wikipedia.org/wiki/C++11