C++11/14 引入了一系列现代特性,改变了对 C++ 类型的理解和使用方式。
当遇到万能引用时,型别推导规则会区分实参是左值还是右值。非万能引用从来不区分。
尽管函数无法声明真正的数组型别形参,但它们能够将形参声明成数组的引用。
auto 型别推导与模板型别推导本质相同,但有一个关键区别:
std::initializer_list 类型{...} 推导为 initializer_listdecltype 返回变量或表达式的精确类型,不会发生类型退化,适合用于:
std::forward 保持参数的值类别(左值/右值)C++11 引入 lambda,C++14 引入泛型 lambda 和捕获表达式初始化:
// C++11 lambda
auto f = [](int x) { return x * 2; };
// C++14 泛型 lambda
auto g = [](auto x) { return x + x; };
// C++14 初始化捕获(移动捕获)
auto ptr = std::make_unique<int>(42);
auto h = [p = std::move(ptr)]{ return *p; };
始终使用 nullptr 而非 NULL 或 0。nullptr 是 std::nullptr_t 类型,不会与整型混淆。