C++11 引入了许多新特性,极大地增强了语言的功能和灵活性。以下是一些程序员必须掌握的重要特性:
1. 自动类型推导(auto): auto 关键字允许编译器根据初始化表达式自动推导变量的类型。
auto x = 42; // x 的类型是 int
auto y = 3.14; // y 的类型是 double
2. 范围for循环(Range-based for loop): 这种循环方式使得遍历容器更加简洁。
std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto& v : vec) {
std::cout << v << std::endl;
}
3. 智能指针(Smart Pointers): 包括 std::unique_ptr 和 std::shared_ptr,用于自动管理动态分配的内存,避免内存泄漏。
std::unique_ptr<int> p1(new int(10));
std::shared_ptr<int> p2 = std::make_shared<int>(20);
4. lambda 表达式(Lambda Expressions): 允许在代码中定义匿名函数,简化了函数对象的使用。
auto add = [](int a, int b) { return a + b; };
std::cout << add(2, 3) << std::endl; // 输出 5
5. 右值引用(Rvalue References)和移动语义(Move Semantics): 通过 && 引用和 std::move,可以实现高效的资源转移,减少不必要的拷贝。
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = std::move(v1); // v1 资源转移到 v2
6. constexpr: 允许在编译时计算常量表达式,提高程序的性能。
constexpr int square(int x) {
return x * x;
}
int arr[square(5)]; // arr 的大小是 25
7. nullptr: 引入了 nullptr 关键字,替代传统的 NULL,表示空指针。
int* p = nullptr;
8. 静态断言(static_assert): 在编译时进行断言检查,确保某些条件在编译时满足。
static_assert(sizeof(int) == 4, "int 类型的大小不是 4 字节");
9. 统一的初始化语法(Uniform Initialization Syntax): 通过花括号 {} 进行统一的初始化。
int arr[] = {1, 2, 3, 4};
std::vector<int> vec = {1, 2, 3, 4};
10. 线程和原子操作(Threads and Atomics): C++11 标准库引入了多线程支持,包括 std::thread 和原子操作类 std::atomic。
std::thread t([]{ std::cout << "Hello from thread!" << std::endl; });
t.join();
掌握这些特性将有助于编写更高效、更简洁和更安全的 C++ 代码。