C++ 11 标准概述
C++ 11(官方正式名称为 ISO/IEC 14882:2011)是 C++ 编程语言标准的一个具有里程碑意义的版本,发布于 2011 年。它标志着这门语言进行了一次重大的革新,引入了各种各样的特性和增强功能,显著提升了 C++ 代码的可用性、性能和安全性。在 C++ 11 之前,C++ 03 是当时的标准,虽然它巩固了语言的基础,但 C++ 11 带来了现代编程的理念,塑造了随后几年 C++ 开发的面貌。
在本文中,我们将一起探索 C++ 11 引入的关键特性和改进,包括语言层面的增强、标准库的补充以及被弃用的特性。
C++ 11 标准中的核心特性和改进
C++ 11 引入了众多特性,使得这门语言变得更加强大、富有表现力且更易于使用。以下是 C++ 11 带来的主要特性和改进:
描述
—
auto 关键字允许编译器在编译时自动推导变量的类型。这有助于减少显式指定类型的必要,从而写出更整洁、更易于维护的代码。auto x = 5; // x 是 int
auto y = 3.14; // y 是 double |
C++11 引入了一种用于遍历容器的新语法,称为基于范围的 for 循环(Range-based for loop)。这一特性通过消除显式迭代器的需求简化了循环代码。for (auto& i : v) {
//code
} |
Lambda 表达式允许您直接在代码中定义匿名函数。这对于简短的内联函数和回调特别有用。
C++11 引入了 std::uniqueptr 和 std::sharedptr,它们通过在内存不再需要时自动释放内存,实现了内存管理的自动化,并有效防止了内存泄漏。
移动语义和右值引用(&&)通过允许从临时对象转移资源,实现了更高效的内存管理,减少了不必要的拷贝操作。
constexpr 关键字允许函数在编译时进行求值,从而实现更好的优化,并可能生成运行速度更快的代码。
C++11 引入了 nullptr 来表示空指针,取代了较旧的 NULL 宏,并避免了类型相关的歧义。
可变参数模板允许函数和类接受任意数量的模板参数,从而实现更灵活、更通用的代码。
decltype 关键字允许推导表达式的类型,在编写通用代码时提供了更大的灵活性。
C++11 引入了一种使用大括号初始化变量的统一方式,适用于任何类型,包括数组、结构和类。int arr[] = {1, 2, 3};
vector vec{4, 5, 6}; |
C++11 引入了强类型枚举(enum class),以避免名称冲突并提高类型安全性。
C++11 引入了一种使用 [[attribute]] 语法在代码中指定属性的标准方法,从而能更精细地控制编译器行为。
C++11 中的标准库特性
C++ 11 还对 C++ 标准库进行了大幅增强,使其变得更加通用和强大。
#### 1. 新增容器
- std::array: 固定大小数组的封装。
- std::forward_list: 单向链表。
- <a href="https://www.geeksforgeeks.org/cpp/unorderedmap-in-cpp-stl/">std::unorderedmap 和 <a href="https://www.geeksforgeeks.org/cpp/unorderedset-in-cpp-stl/">std::unorderedset:基于哈希的关联容器。
#### 2. 并发支持
C++11 引入了一个强大的多线程库,包括:
- std::thread: 用于创建和管理线程。
- std::mutex: 用于线程同步。
- std::future 和 std::promise: 用于异步操作。
#### 3. 正则表达式
C++ 11 添加了一个正则表达式库 (),使得我们能够直接在语言内部进行模式匹配和文本处理。
regex pattern("\\d+");
string s = "123";
cout << regex_match(s, pattern); // 输出 1 (true)
#### 4. 元组 (Tuples)
关于 std::tuple 的引入,允许我们