侯捷 C++ 课程学习笔记:C++ 2.0 新特性

一、课程目标

这节课的目标是帮助学员全面认识 C++ 2.0(即 C++11/14)的新特性,并通过实例获得实际体验。课程内容涵盖语言和标准库两个层面,旨在让学员深入理解 C++ 2.0 的核心特性和应用场景。

二、C++ 标准的演化

C++ 标准经历了多个版本的演化,每个版本都引入了新的特性和改进。以下是 C++ 标准的主要版本:

  • C++ 98 (1.0):第一个正式的 C++ 标准,奠定了 C++ 语言的基础。
  • C++ 03 (TR1, Technical Report 1):对 C++ 98 的技术报告,引入了一些新的特性和改进。
  • C++ 11 (2.0):引入了大量新特性,如自动类型推导、初始化列表、移动语义、智能指针等。
  • C++ 14:对 C++ 11 的小幅改进和补充,进一步增强了语言的表达能力和性能。
三、C++ 2.0 新特性

C++ 2.0(即 C++11/14)引入了许多新特性,这些特性在语言和标准库两个层面都有所体现。以下是一些主要的新特性:

1. 语言层面的新特性
  • 自动类型推导(auto 关键字)

    • auto 关键字可以自动推导变量的类型,简化代码编写。
    • 示例代码:
      auto x = 42;  // x 的类型为 int
      auto y = 3.14;  // y 的类型为 double
      
  • 范围 for 循环(Range-based for loop)

    • 范围 for 循环简化了遍历容器的代码。
    • 示例代码:
      std::vector<int> vec = {1, 2, 3, 4, 5};
      for (auto i : vec) {
          std::cout << i << " ";
      }
      
  • Lambda 表达式

    • Lambda 表达式允许在代码中定义匿名函数,简化了函数对象的使用。
    • 示例代码:
      auto add = [](int a, int b) { return a + b; };
      std::cout << add(2, 3) << std::endl;  // 输出 5
      
  • 移动语义(Move Semantics)

    • 移动语义允许资源的转移,避免不必要的拷贝,提高性能。
    • 示例代码:
      std::vector<int> vec1 = {1, 2, 3};
      std::vector<int> vec2 = std::move(vec1);  // 移动 vec1 的资源到 vec2
      
  • 智能指针(Smart Pointers)

    • 智能指针(如 std::unique_ptrstd::shared_ptr)管理动态分配的内存,防止内存泄漏。
    • 示例代码:
      std::unique_ptr<int> ptr(new int(42));
      std::cout << *ptr << std::endl;  // 输出 42
      
2. 标准库层面的新特性
  • 新的容器

    • std::array:固定大小的数组,提供更安全的数组操作。
    • std::forward_list:单向链表,支持高效的插入和删除操作。
    • std::unordered_setstd::unordered_map:无序集合和映射,使用哈希表实现,提供更快的查找速度。
  • 正则表达式库(

    • 提供了强大的正则表达式支持,用于字符串匹配和处理。
    • 示例代码:
      std::string text = "Hello, world!";
      std::regex pattern("world");
      std::smatch match;
      if (std::regex_search(text, match, pattern)) {
          std::cout << "Found: " << match[0] << std::endl;
      }
      
  • 线程库(

    • 提供了多线程编程的支持,包括线程的创建、同步和管理。
    • 示例代码:
      std::thread t([]() {
          std::cout << "Hello from thread!" << std::endl;
      });
      t.join();
      
  • 函数对象(

    • 提供了函数对象的支持,包括 std::functionstd::bindstd::mem_fn
    • 示例代码:
      std::function<int(int, int)> add = [](int a, int b) { return a + b; };
      std::cout << add(2, 3) << std::endl;  // 输出 5
      
四、头文件的变化

C++ 2.0(即 C++11/14)引入了许多新的头文件,这些头文件提供了新的特性和功能。以下是一些主要的头文件:

  • :提供了类型特征的支持,用于编译时类型检查。
  • :提供了无序集合和映射的实现。
  • :提供了单向链表的实现。
  • :提供了固定大小的数组的实现。
  • :提供了元组的支持,用于存储多个不同类型的值。
  • :提供了正则表达式的支持。
  • :提供了多线程编程的支持。

示例代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;

int main() {
    // 示例代码
    return 0;
}
五、学习心得

通过学习,我对 C++ 2.0(即 C++11/14)的新特性有了更深入的理解。

在实际编程中,合理使用 C++ 2.0 的新特性可以显著提高代码的可读性和可维护性。例如,自动类型推导和范围 for 循环简化了代码编写,移动语义和智能指针提高了性能和安全性,正则表达式和多线程编程提供了更强大的功能。

你可能感兴趣的:(c++,c++,学习,笔记,开发语言)