c++11特性
本次笔记记录一些常用的c++11特性,以方便查看。
1. 方便的列表快速初始化
int i = int{ 1 };
int arr[5] {1, 2, 3};
vector<int> v{0, 1, 3};
map<int, int> m{{1, 2}, {3, 4}};
string s{"hello"};
int* a = new int {1};
int * p = new int[] {1, 2, 3};
2. 方便的auto关键字
使用auto关键字可以完成自动推导,auto声明的变量需要立即赋值,auto不能代表一个实际的类型声明。
在c++14中auto关键字还可以作为函数的返回值。但只能用于定义函数,不能用于声明函数。
auto x = 5; // OK
auto a = new auto(1); // OK
const auto* p = &x, u = 6; // p是const int*类型, u是const int类型
static auto v = 0.1; // v是double类型
auto int i; // error
auto s; // error
int arr[5] = {1, 2, 3, 4, 5};
for (auto i : arr) {
// 此方式支持数组、字符串、容器、迭代器等
}
3. 简洁的lambda表达式
形式如下:
- [函数对象参数](操作符重载函数参数)->返回值类型{函数体}
- []内的参数指的是lambda表达式能获取到的全局变量。如果传入
=
,则表示传入所有全局变量。 - ()内的参数指的是lambda表达式的形参。
- []内的参数指的是lambda表达式能获取到的全局变量。如果传入
4. decltype
decltype是用来从一个变量或表达式中获取类型。
int a = 1;
decltype(a) b = a;
其它还有不少特性,先更新这些。