C++11 是 C++ 语言的一个重要标准更新,增加了许多新特性,提升了开发效率、性能和可读性。以下是 C++11 中一些关键的新特性:

1. 自动类型推导 (auto)

使用 auto 关键字可以自动推导变量的类型,减少代码的冗余。

auto i = 10;   // int 类型
auto d = 3.14; // double 类型

2. 范围 for 循环

引入了基于范围的 for 循环,更简洁地遍历容器。

std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto v : vec) {
    std::cout << v << " ";
}

3. Lambda 表达式

支持匿名函数,方便实现轻量的函数对象,特别是在需要回调或 STL 算法时。

auto add = [](int a, int b) { return a + b; };
std::cout << add(3, 4);  // 输出 7

4. 智能指针 (std::shared_ptrstd::unique_ptr)

C++11 提供了两种常用的智能指针来管理动态内存,减少内存泄漏问题。

  • std::shared_ptr 支持多个对象共享同一个指针,引用计数自动管理内存。
  • std::unique_ptr 独占资源,确保同一时间只能有一个指针拥有对象。
std::shared_ptr<int> sptr = std::make_shared<int>(10);
std::unique_ptr<int> uptr = std::make_unique<int>(20);

5. 右值引用和移动语义

C++11 引入了右值引用 (&&) 和移动语义,优化了对象复制的效率,避免不必要的拷贝。

std::string s1 = "Hello";
std::string s2 = std::move(s1);  // 移动语义,s1 的内容被转移给 s2

6. 变长参数模板 (Variadic Templates)

变长参数模板允许定义接受任意数量模板参数的函数或类。

template<typename... Args>
void print(Args... args) {
    (std::cout << ... << args) << '\n';  // 折叠表达式
}

7. 线程库 (<thread>)

C++11 引入了标准的多线程库,提供了线程的创建与管理,并增加了同步机制,如互斥锁(std::mutex)。

std::thread t([] { std::cout << "Thread running\n"; });
t.join();

8. nullptr 关键字

用于代替 NULL,表示空指针,避免类型不匹配问题。

int* p = nullptr;  // 空指针

9. constexpr 常量表达式

constexpr 允许在编译时计算常量值,提升性能。

constexpr int square(int x) { return x * x; }
int result = square(5);  // 编译时计算结果

10. 枚举类 (enum class)

enum class 提供了作用域范围的枚举类型,避免与其他符号冲突。

enum class Color { Red, Green, Blue };
Color c = Color::Red;

11. 初始化列表 (std::initializer_list)

C++11 支持使用花括号进行列表初始化,方便容器和对象的初始化。

std::vector<int> vec = {1, 2, 3, 4};

12. 统一的初始化语法

引入了统一的初始化语法,允许使用 {} 进行初始化。

int x{10};
std::vector<int> vec{1, 2, 3};

13. std::functionstd::bind

std::function 提供了类型安全的函数包装器,std::bind 用于绑定函数参数或部分调用。

std::function<int(int)> f = [](int x) { return x + 1; };

14. decltype 关键字

decltype 关键字可以推断表达式的类型,常用于模板编程中。

int a = 10;
decltype(a) b = 20;  // b 的类型为 int

15. 静态断言 (static_assert)

static_assert 在编译时检查条件是否为真,用于捕获编译期错误。

static_assert(sizeof(int) == 4, "Unexpected int size");

C++11 的引入大大增强了 C++ 语言的表达能力、效率和易用性,使得代码更加现代化,简洁和高效。