空指针
typedef decltype(nullptr) nullptr_t;
C++11/14新增关键字“nullptr”,解决NULL存在的缺陷(#define NULL 0 实际上是一个整数,而不是真正的指针,有时候会造成语义混淆),nullptr并不是指针,而是一个类型为nullptr_t的编译期常量对象实例
初始化
统一使用{}初始化变量,称为“列表初始化”。例如:
int x{1};
vector<int> c{1,1};
引入新式for循环
for (auto x : a) {}
for (const auto& x : v) {}
声明元素类型是使用auto将推导出类型,有拷贝代价,也不能修改元素,所以可以为auto添加修饰,使用const auto&/auto &&避免拷贝,或者auto&以修改元素的值。在循环中不可以变动容器删减,否则会导致遍历的迭代器失效。
函数声明
C++11/14增加了一种新的函数语法,允许返回值类型后置,使用了auto/decltype的类型推导能力,基本形式:
auto func(...) -> type {...}
这种方式有什么好处呢?举个例子:
template<typename T, typename U>
auto aaa(T t, U u) -> decltype (t + u)
{ return t + u;}
函数aaa是一个简单的模板函数,但他的返回值类型无法用传统的语法声明,因为返回值类型必须由参数t和u决定,而函数名之前这两个参数还未定义。