C++11
、
C++14
、
C++17
、
C++20
常用新特性
C++11
自动类型推断(auto 关键字):C++11 引入了 auto 关键字,可以根据变量初始值自动推导出变量类
型。例如:
1
2
auto i = 42; // i 被推导为 int 类型
auto d = 3.14; // d 被推导为 double 类型
基于范围的 for 循环(range-based for loop):可以方便地遍历容器中的元素,例如:
1
2
3
4
std::vector<int> v = {1, 2, 3, 4, 5};
for (auto& i : v) {
i *= 2;
}
lambda 表达式:lambda 表达式可以用来定义匿名函数,方便地传递函数对象,例如:
1
2
auto f = [](int x, int y) -> int { return x + y; };
int result = f(3, 4); // result = 7
移动语义和右值引用(move semantics 和 rvalue references):通过右值引用可以实现资源的有效移
动而不是复制,提高程序的效率,例如:
1
2
std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2 = std::move(v1); // v2 接管了 v1 的资源,v1 变为无效
状态
智能指针(smart pointers):C++11 引入了三种智能指针:unique_ptr、shared_ptr 和 weak_ptr,
可以更好地管理动态内存,避免内存泄漏和悬空指针,例如:
1
2
3
std::unique_ptr<int> p(new int(42));
std::shared_ptr<int> q = std::make_shared<int>(42);
std::weak_ptr<int> r = q;
空指针常量(nullptr):C++11 引入了 nullptr 关键字,用于表示空指针,避免了 NULL 宏带来的一
些问题,例如:
1
2
void f(int* p) {}
f(nullptr); // 可以显式地传递空指针
右值引用与移动构造函数:右值引用可以方便地实现移动构造函数和移动赋值运算符,用于高效地处
理临时对象和避免复制开销,例如: