深入理解 C++ 11 新特性
C11 引入了许多新特性,包括语言特性、标准库更新和性能改进等。以下是一些 C11 新特性的深入解释:
C++11 引入了 auto 关键字,可以用于自动推导变量的类型。这使得代码更加简洁和易读,特别是在模板和复杂类型场景下更为实用。
auto
auto x = 10; // 推导为 int 类型 auto y = 3.14; // 推导为 double 类型 auto z = std::vector<int>(); // 推导为 std::vector<int> 类型
Lambda 表达式允许在代码中定义匿名函数,提供了更灵活和方便的函数定义方式。它可以捕获其所在作用域的变量,并且支持函数对象的声明和调用。
auto add = [](int a, int b) { return a + b; }; std::cout << add(3, 4) << std::endl; // 输出 7
范围 for 循环是 C++11 中引入的一种简化的遍历容器元素的方式,可以遍历容器中的每个元素,而无需手动指定迭代器。
std::vector<int> vec = {1, 2, 3, 4, 5}; for (auto& elem : vec) { std::cout << elem << " "; } // 输出 1 2 3 4 5
移动语义和右值引用使得在转移对象所有权时能够避免不必要的内存拷贝,提高了代码的性能和效率。
std::vector<int> source = {1, 2, 3, 4, 5}; std::vector<int> dest = std::move(source); // 使用移动语义转移所有权
C++11 引入了线程库,使得多线程编程更加简单和直观。通过 std::thread 类可以创建和管理线程,实现并发执行。
std::thread
#include <iostream> #include <thread> void foo() { std::cout << "Hello from thread!" << std::endl; } int main() { std::thread t(foo); // 创建新线程 t.join(); // 等待线程结束 return 0; }
智能指针是 C++11 中引入的一种内存管理机制,用于自动管理动态分配的内存,避免内存泄漏和野指针问题。
#include <memory> std::shared_ptr<int> ptr = std::make_shared<int>(42); // shared_ptr std::unique_ptr<int> ptr = std::make_unique<int>(42); // unique_ptr
C11 还引入了许多其他的新特性,如 constexpr、nullptr、std::tuple、std::initializer_list 等。深入理解 C11 新特性可以帮助开发者写出更加现代化和高效的 C++ 代码。
constexpr
nullptr
std::tuple
std::initializer_list