C++是一种高级编程语言,以其强大的功能、灵活性和高效性而闻名。它是由Bjarne Stroustrup在20世纪80年代初期在贝尔实验室开发的,作为C语言的一个扩展。C++不仅包含了C语言的所有特性,还引入了面向对象编程(OOP)的概念,包括类、继承、多态和封装。
C++的一些关键特点:
- 面向对象编程:C++支持类和对象,允许程序员通过封装、继承和多态性来构建复杂的程序。
- 泛型编程:通过模板,C++支持泛型编程,允许程序员编写与数据类型无关的代码。
- 内存管理:C++提供了手动内存管理的能力,包括指针和动态内存分配。
- 异常处理:C++支持异常处理机制,允许程序在遇到错误时以一种结构化的方式进行恢复。
- 标准模板库(STL):C++的STL提供了一系列的数据结构和算法,如向量(vector)、列表(list)、映射(map)和排序(sort)等。
- 函数重载:C++允许定义具有相同名称但参数不同的多个函数。
- 运算符重载:C++允许程序员为用户定义的类型重新定义运算符的行为。
- 多重继承:C++支持从多个基类继承,虽然这可能导致复杂的设计问题。
- 模板:模板是C++的一个强大特性,允许程序员定义可以处理多种数据类型的类和函数。
- 编译时多态:通过函数重载和模板,C++支持在编译时解决多态性。
- 运行时多态:C++通过虚函数支持运行时多态性。
- 性能:C++以其高性能而著称,通常用于需要快速执行和低级别硬件操作的应用程序。
- 跨平台:C++可以在多种操作系统和硬件平台上编译和运行。
C++11
| 特性 | 一句话说明 | 示例 |
|---|
| auto | 自动类型推导 | auto x = 3.14; |
| decltype | 获取表达式类型 | decltype(x) y; |
| nullptr | 真正的空指针,不是 0 也不是 NULL | int* p = nullptr; |
| 范围 for | 遍历容器 | for (auto& x : vec) |
| Lambda | 匿名函数 | [&](int x) { return x + n; } |
| 智能指针 | RAII 管理堆内存 | shared_ptr<int> p = make_shared<int>(42); |
| 移动语义 | 零拷贝转移资源 | vector2 = move(vector1); |
| override/final | 显式标注覆盖和禁止继承 | void func() override; |
| constexpr | 编译期常量 | constexpr int square(int x) { return x * x; } |
C++14
| 特性 | 一句话说明 |
|---|
| 泛型 Lambda | Lambda 参数可以用 auto:[](auto a, auto b) { return a + b; } |
| 返回类型推导 | 函数可以用 auto 推导返回类型 |
| make_unique | 终于有了 make_unique<T>() |
C++17
| 特性 | 一句话说明 |
|---|
| 结构化绑定 | 解包 tuple/struct:auto [a, b] = myPair; |
| if constexpr | 编译期条件分支 |
| 折叠表达式 | 变参模板展开简化 |
| std::optional | 可能为空的值 |
| std::variant | 类型安全的联合体 |
| 文件系统库 | 跨平台文件操作 |
C++20
| 特性 | 一句话说明 |
|---|
| 概念(Concepts) | 模板参数的约束:template<typename T> requires Integral<T> |
| 协程(Coroutines) | 可暂停/恢复的函数,异步编程利器 |
| 模块(Modules) | 替代头文件,编译加速 |
| 范围(Ranges) | 函数式风格的容器操作 |
三路比较 <=> | 自动生成所有比较运算符 |