C++11 引入了许多新特性,显著增强了语言的功能性和可用性。以下是一些关键的新特性及其简单示例:
-
Auto 关键字:自动类型推导。
auto x = 5; // x 的类型自动推导为 int auto y = 3.14; // y 的类型自动推导为 double
-
Nullptr:替代 NULL 的指针字面量。
int* p = nullptr;
-
范围基的 for 循环:更简洁地遍历容器。
std::vector<int> vec = {1, 2, 3, 4, 5}; for (int x : vec) { std::cout << x << std::endl; }
-
Lambda 表达式:定义匿名函数对象。
auto lambda = [](int x) { return x * x; }; std::cout << lambda(5) << std::endl; // 输出 25
-
类型别名(using):更灵活的类型定义。
using StringList = std::vector<std::string>; StringList list = {"Hello", "World"};
-
智能指针:std::shared_ptr 和 std::unique_ptr。
std::shared_ptr<int> sp = std::make_shared<int>(10); std::unique_ptr<int> up = std::make_unique<int>(20);
-
右值引用和移动语义:提高性能,减少不必要的拷贝。
std::vector<int> createVector() { return std::vector<int>{1, 2, 3, 4, 5}; } std::vector<int> vec = createVector(); // RVO(返回值优化)和移动语义
-
显式类型转换(static_cast, dynamic_cast, const_cast, reinterpret_cast):更安全的类型转换。
double d = 3.14; int i = static_cast<int>(d);
-
委托构造和默认构造:简化构造函数的定义。
class MyClass { public: MyClass() = default; MyClass(int x) : value(x) {} MyClass(const MyClass& other) = delete; private: int value; };
-
初始化列表:统一的初始化方式。
std::vector<int> vec = {1, 2, 3, 4, 5}; int arr[] = {1, 2, 3, 4, 5};
-
标准库增强:包括线程库、正则表达式库、新的随机数库等。
std::thread t([](){ std::cout << "Hello from thread" << std::endl; }); t.join();
-
原生字符串字面量:避免转义字符的麻烦。
std::string path = R"(C:\Users\Name\Documents)";
这些特性使得 C++11 相对于之前的版本更加现代化和易用,提升了开发效率和程序性能。