分类:C++
外观
C++语言
C++是一种功能强大的通用编程语言,由比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)于1979年开始设计和开发,最初称为"带类的C"(C with Classes),后于1983年更名为C++。
概述
C++是一种静态类型的、编译型、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程、泛型编程和函数式编程等多种编程范式。C++的设计目标是在C语言的基础上提供对象、类、继承等面向对象特性,同时保持C语言的高效性和硬件控制能力。
语言特点
- 高效性: C++程序可以编译成高效的机器码,运行速度接近汇编语言编写的程序
- 可移植性: 在不同平台上编译的C++程序只需要很小的修改或不需修改
- 面向对象: 支持类、对象、继承、多态、封装等面向对象特性
- 泛型编程: 通过模板机制支持参数化类型,实现代码复用
- STL库: 提供丰富的标准模板库,包括各种容器、算法和迭代器
- 低级内存操作: 允许直接访问硬件和内存,提供指针等低级操作
- 兼容C: 大部分C代码可以在C++中直接使用
历史发展
主要版本
- C with Classes (1979): 最初版本,增加了类、继承等面向对象特性
- C++ 1.0 (1983): 正式更名为C++,增加了虚函数、运算符重载、引用等特性
- C++ 2.0 (1989): 增加了多重继承、抽象类等特性
- C++98 (1998): 第一个ISO标准版本,引入STL,异常处理等
- C++03 (2003): 对C++98的修订版本,修复了一些缺陷
- C++11 (2011): 重大更新,引入auto关键字、lambda表达式、智能指针、线程库等
- C++14 (2014): 对C++11的扩展,改进了lambda表达式,增加了二进制字面量等
- C++17 (2017): 增加了结构化绑定、if constexpr、std::optional等特性
- C++20 (2020): 引入了概念(concepts)、协程(coroutines)、模块(modules)等特性
- C++23 (2023): 正在开发中的最新标准
编程范式
C++支持多种编程范式,使其成为一种非常灵活的语言:
面向对象编程
C++提供了完整的面向对象编程支持:
- 类与对象: 通过class和struct关键字定义类,实例化为对象
- 继承: 支持单继承、多重继承和虚继承
- 多态: 通过虚函数实现动态多态
- 封装: 通过访问修饰符(public, private, protected)实现信息隐藏
class Animal {
public:
virtual void makeSound() const = 0; // 纯虚函数
};
class Cat : public Animal {
public:
void makeSound() const override {
std::cout << "喵喵喵" << std::endl;
}
};
泛型编程
C++通过模板机制实现泛型编程:
- 函数模板: 创建可以处理不同类型参数的函数
- 类模板: 创建可以使用不同类型的类
- STL: 标准模板库提供了泛型容器、算法和迭代器
template<typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
过程式编程
C++完全支持C语言的过程式编程特性:
- 函数: 代码组织的基本单元
- 顺序、选择、循环: 基本控制结构
- 指针和引用: 直接内存操作
函数式编程
C++11及以后版本增加了函数式编程的支持:
- Lambda表达式: 创建匿名函数
- std::function: 函数对象包装器
- 高阶函数: 函数可以作为参数和返回值
auto add = [](int a, int b) { return a + b; };
std::cout << add(5, 3) << std::endl; // 输出:8
语言核心特性
内存管理
C++提供了多种内存管理机制:
- 栈内存: 自动分配和释放的局部变量
- 堆内存: 使用new和delete手动分配和释放
- 智能指针: std::unique_ptr、std::shared_ptr等自动管理内存
- RAII原则: "资源获取即初始化",通过对象生命周期管理资源
异常处理
C++提供了完整的异常处理机制:
- try-catch块: 捕获和处理异常
- throw语句: 抛出异常
- 异常规范: 声明函数可能抛出的异常类型
- 标准异常层次: std::exception及其派生类
运算符重载
C++允许为自定义类型定义操作符的行为:
- 一元运算符: +, -, !, ~等
- 二元运算符: +, -, *, /, %, &, |, ^等
- 关系运算符: ==, !=, <, >, <=, >=等
- 赋值运算符: =, +=, -=, *=等
- 函数调用运算符: operator()
- 下标运算符: operator[]
- 智能指针运算符: operator->, operator*
名称空间
C++使用namespace机制组织代码并避免名称冲突:
namespace Math {
double PI = 3.14159265358979;
double square(double x) {
return x * x;
}
}
// 使用
double area = Math::PI * Math::square(radius);
标准库
C++标准库提供了丰富的功能:
标准模板库(STL)
- 容器: vector, list, map, set, queue, stack等
- 算法: sort, find, transform, accumulate等
- 迭代器: 统一访问容器元素的接口
- 函数对象: 可作为算法参数的函数封装
输入输出库
- iostream: cin, cout, cerr, clog等
- fstream: 文件输入输出
- stringstream: 字符串流处理
其他标准库
- 字符串处理: std::string, std::string_view
- 数值计算: <numeric>, <cmath>
- 时间处理: <chrono>
- 线程支持: <thread>, <mutex>, <future>
- 正则表达式: <regex>
- 随机数: <random>
- 智能指针: <memory>
- 文件系统: <filesystem> (C++17)
应用领域
C++广泛应用于各种领域:
- 系统软件: 操作系统、编译器、数据库
- 游戏开发: 游戏引擎、3D图形处理
- 嵌入式系统: 实时控制、低级硬件交互
- 高性能计算: 科学计算、物理模拟
- 金融应用: 高频交易、风险分析
- 图形用户界面: 使用Qt、wxWidgets等框架
- 网络编程: 服务器应用、网络协议实现
- 人工智能: 机器学习库、深度学习框架
编译环境
主要编译器
- GCC/G++: 开源编译器,支持多平台
- MSVC: Microsoft Visual C++编译器
- Clang: LLVM项目的C/C++前端
- Intel C++ Compiler: 优化用于Intel处理器
构建工具
- Make: 传统的构建自动化工具
- CMake: 跨平台构建系统生成器
- Ninja: 注重速度的构建系统
- Visual Studio: 集成开发环境和构建系统
- Bazel: Google的构建工具
学习资源
经典书籍
- 《C++程序设计语言》 - Bjarne Stroustrup(作者)
- 《C++ Primer》 - Stanley B. Lippman, Josée Lajoie, Barbara E. Moo
- 《Effective C++》 - Scott Meyers
- 《STL源码剖析》 - 侯捷
- 《深度探索C++对象模型》 - Stanley B. Lippman
在线资源
- cppreference.com: 全面的C++参考
- cplusplus.com: 教程和参考
- ISO C++官方网站: isocpp.org
- C++标准草案: 最新标准的工作版本
参见
分类“C++”中的页面
以下200个页面属于本分类,共473个页面。
(上一页)(下一页)C
- C 从C++ 调用
- C++ auto ptr 弃用
- C++ break 语句
- C++ C 风格字符串
- C++ catch 块
- C++ Catch2
- C++ CMake
- C++ continue 语句
- C++ CRTP模式
- C++ delete 运算符
- C++ do While 循环
- C++ dynamic cast
- C++ extern C
- C++ final 关键字
- C++ for 循环
- C++ future 与 promise
- C++ GoogleTest
- C++ goto 语句
- C++ IDE 选择
- C++ if Else
- C++ IO 库概述
- C++ lambda 表达式
- C++ Make
- C++ make shared
- C++ make unique
- C++ Mixin类
- C++ new 和delete 重载
- C++ new 运算符
- C++ noexcept 说明符
- C++ override 关键字
- C++ packaged tas
- C++ raii 与异常
- C++ raii 原则
- C++ RTTI机制
- C++ sfinae
- C++ shared ptr
- C++ shared ptr 详解
- C++ string 类
- C++ switch Case
- C++ this 指针
- C++ throw 语句
- C++ try 块
- C++ unique ptr
- C++ unique ptr 详解
- C++ weak ptr
- C++ weak ptr 详解
- C++ while 循环
- C++ 一元运算符重载
- C++ 一维数组
- C++ 下标运算符重载
- C++ 与 C 字符串
- C++ 与 C 库封装
- C++ 与 C 指针
- C++ 与 C 数组
- C++ 与 C 枚举
- C++ 与 C 混合编程最佳实践
- C++ 与 C 的内存管理
- C++ 与 C 的区别
- C++ 与 C 结构体
- C++ 与 C 联合体
- C++ 中介者模式
- C++ 二元运算符重载
- C++ 二分查找操作
- C++ 二维数组
- C++ 二进制文件
- C++ 互斥量
- C++ 交叉编译
- C++ 享元模式
- C++ 从函数返回指针
- C++ 从函数返回数组
- C++ 代理模式
- C++ 代理模式实现
- C++ 代码优化
- C++ 代码审查
- C++ 代码格式化
- C++ 代码组织
- C++ 代码覆盖率
- C++ 代码风格
- C++ 位函数对象
- C++ 作用域规则
- C++ 依赖管理
- C++ 修改序列操作
- C++ 修饰符
- C++ 元编程
- C++ 关系运算符重载
- C++ 关联容器
- C++ 兼容 C 代码
- C++ 内存优化
- C++ 内存对齐
- C++ 内存模型
- C++ 内存池
- C++ 内存泄漏
- C++ 内存管理规范
- C++ 内存调试
- C++ 内存调试技术
- C++ 内联函数
- C++ 内联成员函数
- C++ 写入文件
- C++ 函数try 块
- C++ 函数包装器
- C++ 函数参数
- C++ 函数基础
- C++ 函数声明
- C++ 函数定义
- C++ 函数对象
- C++ 函数对象最佳实践
- C++ 函数对象概述
- C++ 函数指针
- C++ 函数模板
- C++ 函数调用
- C++ 函数调用运算符重载
- C++ 函数适配器
- C++ 函数重载
- C++ 创建型模式
- C++ 前向迭代器
- C++ 动态内存分配
- C++ 动态数组
- C++ 包管理
- C++ 单例模式
- C++ 单例模式实现
- C++ 单元测试
- C++ 单步执行
- C++ 历史
- C++ 原型模式
- C++ 原子操作
- C++ 参数默认值
- C++ 友元函数
- C++ 友元类
- C++ 双向迭代器
- C++ 反向迭代器
- C++ 反射技术
- C++ 变参模板
- C++ 变量
- C++ 可移植性
- C++ 可调用对象
- C++ 右值引用
- C++ 合并操作
- C++ 同步与刷新
- C++ 名称修饰
- C++ 启动线程
- C++ 命令模式
- C++ 命令模式实现
- C++ 命名空间
- C++ 命名约定
- C++ 回调函数
- C++ 垃圾回收
- C++ 基类与派生类
- C++ 堆操作
- C++ 外观模式
- C++ 多态
- C++ 多线程最佳实践
- C++ 多线程概述
- C++ 多维数组
- C++ 多重继承
- C++ 大型项目最佳实践
- C++ 委托模式
- C++ 字符串修改
- C++ 字符串初始化
- C++ 字符串基础
- C++ 字符串声明
- C++ 字符串搜索
- C++ 字符串比较
- C++ 字符串流
- C++ 字符串算法
- C++ 字符串视图
- C++ 字符串转换
- C++ 字符串输入输出
- C++ 字符串连接
- C++ 字符串迭代
- C++ 字符数组
- C++ 存储类
- C++ 安全编程
- C++ 完美转发
- C++ 容器适配器
- C++ 对象切片
- C++ 对象创建
- C++ 对象组合
- C++ 局部类
- C++ 属性
- C++ 嵌套if
- C++ 嵌套异常
- C++ 嵌套循环
- C++ 嵌套类
- C++ 工厂方法模式
- C++ 工厂模式
- C++ 常用算法示例
- C++ 常见陷阱
- C++ 常量
- C++ 常量引用
- C++ 常量成员
- C++ 并行算法cpp17
- C++ 序列容器
- C++ 建造者模式
- C++ 异常处理基础
- C++ 异常处理最佳实践
- C++ 异常安全
- C++ 异常规范
- C++ 异常重新抛出
- C++ 异步任务
- C++ 引用vs 指针