C++11语言新特性
1:Template表达式内的空格
vector<list<int> >; Old model
vector<list<int>>; New in C++11
之所以有上述规定,是因为那个时候C++编译器会将上述泛型中的>>识别成为运算符,因此才做出了这么一个规定.
2 nullptr 用来替代NULL。
这是因为本质上NULL是一个宏,表示为0,因此在进行参数传递的时候回有二义性,虽然编译器最后还是做出了自己的选择。
而nullptr则不同,编译器回自动的将其转换成为对应类型的指针变量。代码如下:
#include <iostream> using namespace std; void f(int a) { cout << a << endl; cout << "f(int a)" << endl; } void f(void * a) { cout << "f(void * a)" << endl; } int main() { f(NULL); f(nullptr); return 0; }
测试结果显示
因此,在C++11中,最好用nullptr来替代NULL。
3 使用auto来进行类型推导
4 一致性初始化,统一使用{}初始化列表来进行变量初始化。
5 Range-Based for循环
6 Move语义和Rvalue Reference
7 关键字 noexcept
8 关键字 constexpr
9 Labmda表达式
10 decltype关键字
11 尾置返回 一种新的返回值方式。
12 非类型模版参数 模版参数默认值 使用typename来强调是一种类型而不是其他。
先介绍这些吧