← 返回首页

Effective Modern C++

C++11/14 引入了一系列现代特性,改变了对 C++ 类型的理解和使用方式。

型别推导

万能引用(Forwarding References)

当遇到万能引用时,型别推导规则会区分实参是左值还是右值。非万能引用从来不区分。

数组形参推导

尽管函数无法声明真正的数组型别形参,但它们能够将形参声明成数组的引用。

auto 型别推导

auto 型别推导与模板型别推导本质相同,但有一个关键区别:

decltype

decltype 返回变量或表达式的精确类型,不会发生类型退化,适合用于:

移动语义与完美转发

lambda 表达式

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 而非 NULL0。nullptr 是 std::nullptr_t 类型,不会与整型混淆。