C++

技术栈
后端框架
c++cpp系统编程游戏开发嵌入式高性能计算

概览

C++ 技术栈概览

C++ 是由 Bjarne Stroustrup 于 1985 年发布的通用编程语言,以 C 语言为基础引入面向对象特性。经过 C++11/14/17/20/23 标准迭代,已成为支持面向对象、泛型、函数式的多范式语言。

解决什么问题

  • 系统编程:操作系统、驱动程序、嵌入式固件
  • 游戏开发:Unreal Engine、Cocos2d-x 等引擎核心语言
  • 高性能计算:科学计算、量化交易、仿真模拟
  • 桌面应用:Qt / wxWidgets 构建跨平台 GUI
  • 计算机视觉:OpenCV 核心库
  • 数据库引擎:MySQL、MongoDB 等核心用 C++ 编写

关键特性

  • 零开销抽象:不用的特性不产生运行时开销
  • 手动内存管理:RAII、智能指针(unique_ptr / shared_ptr)
  • 多范式:面向对象 + 泛型模板 + 函数式 lambda
  • STL 标准库:容器、算法、迭代器、线程支持
  • 跨平台:编译器支持广泛(GCC、Clang、MSVC)
  • C++20/23 新特性:concepts、ranges、coroutines、modules

安装

C++ 开发环境安装指南

1. 环境准备

要求 说明
操作系统 Windows / macOS / Linux 均可
编译器 GCC 8+ / Clang 10+ / MSVC 2019+
构建工具 CMake 3.16+(推荐)或 Make / MSBuild

2. 安装命令

Windows — Visual Studio(推荐毕设)

  1. 下载 Visual Studio Community(免费)
  2. 安装时勾选「使用 C++ 的桌面开发」工作负载
  3. 安装完成后打开「Developer Command Prompt」即可使用 cl 编译

Windows — MinGW-w64(轻量方案)

# 使用 MSYS2
pacman -S mingw-w64-ucrt-x86_64-gcc mingw-w64-ucrt-x86_64-cmake

macOS

xcode-select --install          # 装 Xcode CLI(含 Clang)
brew install cmake              # CMake 构建工具

Linux (Ubuntu/Debian)

sudo apt update
sudo apt install -y build-essential cmake g++ gdb
# build-essential 包含 gcc/g++/make

验证安装

g++ --version
# 输出示例: g++ (Ubuntu 13.1.0) 13.1.0
cmake --version

3. 常见安装问题

问题 解决方案
g++ 未找到 Linux 执行 sudo apt install g++;Windows 检查 MinGW PATH
CMake 找不到编译器 安装 Visual Studio 或 GCC 后重启 IDE
vcruntime140.dll 缺失 安装 VC++ Redistributable
Linux 头文件缺失 sudo apt install linux-headers-$(uname -r)
编译慢 使用 make -j$(nproc) 多核并行编译

示例

C++ Hello World 与现代 C++ 特性

目标

展示 C++20 标准下的 Hello World 及常用现代 C++ 特性(auto、范围 for、lambda、智能指针)。

完整代码

#include <iostream>
#include <vector>
#include <memory>
#include <algorithm>
#include <ranges>   // C++20 ranges

using namespace std;

int main() {
    // 1. Hello World
    cout << "Hello, C++20 World!" << endl;

    // 2. auto 类型推导
    auto message = string{"C++ 现代特性演示"};
    cout << message << endl;

    // 3. 范围 for + 初始化列表
    vector<int> nums = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

    // 4. Lambda 表达式 + ranges (C++20)
    auto even_squares = nums
        | ranges::views::filter([](int n) { return n % 2 == 0; })
        | ranges::views::transform([](int n) { return n * n; });

    cout << "偶数的平方: ";
    for (int n : even_squares) {
        cout << n << " ";
    }
    cout << endl;

    // 5. 智能指针(自动管理内存)
    auto ptr = make_unique<vector<string>>();
    ptr->push_back("智能指针");
    ptr->push_back("自动释放内存");
    cout << "vector 元素数: " << ptr->size() << endl;

    // 6. 结构化绑定 (C++17)
    auto [sum, count] = []() -> pair<int, int> {
        return {42, 7};
    }();
    cout << "sum = " << sum << ", count = " << count << endl;

    return 0;
}

运行步骤

# 编译(需 GCC 10+ 或 Clang 14+,起用 C++20)
g++ -std=c++20 -o hello hello.cpp
# 运行
./hello

预期输出

Hello, C++20 World!
C++ 现代特性演示
偶数的平方: 4 16 36 64 100
vector 元素数: 2
sum = 42, count = 7

关键点

  • auto 让类型推导交给编译器,减少冗长声明
  • ranges::views 是 C++20 延迟求值的管道操作
  • make_unique 替代 new,RAII 自动管理生命周期
  • Lambda 是现代 C++ 的核心,配合 algorithm 使用能显著减少代码量

教程

C++ 毕设入门教程

前言

C++ 在毕设中常用于:算法仿真、游戏开发(Unreal Engine)、图像处理(OpenCV)、桌面应用(Qt)、单片机上位机。本教程从实际毕设需求出发,帮你快速搭建能用的 C++ 项目。


第一章:选择合适的 C++ 标准

毕设推荐 C++17(兼容性好)或 C++20(新特性多)。

// CMakeLists.txt 中指定
set(CMAKE_CXX_STANDARD 17)

毕设中最常用的现代特性

特性 用途
auto 省去冗长类型声明
vector / map / set STL 容器,替代 C 数组
unique_ptr / shared_ptr 告别 new/delete
Lambda 回调、排序、线程传参
std::thread / std::async 多线程加速
Range-for 简洁遍历

第二章:项目结构最佳实践

毕设项目推荐结构(以图像处理项目为例):

ImageProcessor/
├── CMakeLists.txt
├── src/
│   ├── main.cpp
│   ├── ImageLoader.cpp
│   ├── Filter.cpp
│   └── Utils.cpp
├── include/
│   ├── ImageLoader.h
│   ├── Filter.h
│   └── Utils.h
├── tests/
│   └── test_filter.cpp
└── data/
    └── sample.jpg

CMakeLists.txt 模板:

cmake_minimum_required(VERSION 3.16)
project(ImageProcessor LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)

# 自动收集源文件
file(GLOB_RECURSE SOURCES src/*.cpp)

add_executable(${PROJECT_NAME} ${SOURCES})
target_include_directories(${PROJECT_NAME} PRIVATE include)

# 链接 OpenCV(如有)
find_package(OpenCV QUIET)
if(OpenCV_FOUND)
    target_link_libraries(${PROJECT_NAME} PRIVATE ${OpenCV_LIBS})
endif()

第三章:常见毕设场景与代码

场景一:串口通信上位机(Qt + C++)

参考 Qt 例程中的信号与槽模式,配合 QSerialPort 即可实现。

场景二:图像处理(OpenCV)

人脸检测 10 行搞定:

cv::CascadeClassifier face_cascade;
face_cascade.load("haarcascade_frontalface_default.xml");
std::vector<cv::Rect> faces;
face_cascade.detectMultiScale(gray, faces);
for (const auto& face : faces)
    cv::rectangle(img, face, cv::Scalar(0, 255, 0), 2);

场景三:算法可视化(控制台 + 文件输出)

把运算结果写入 CSV,用 Python/Excel 可视化,是最省事的方案:

#include <fstream>
std::ofstream csv("result.csv");
csv << "x,y\n";
for (int i = 0; i < 100; i++)
    csv << i << "," << sin(i * 0.1) << "\n";

第四章:调试与排错

必学 GDB 命令

g++ -g -o program program.cpp   # -g 开启调试符号
gdb ./program
(gdb) break main.cpp:42          # 设断点
(gdb) run                        # 运行
(gdb) print variable             # 查看变量
(gdb) backtrace                  # 调用栈
(gdb) continue                   # 继续

常见错误速查

错误 原因
Segmentation Fault 空指针/野指针/数组越界
undefined reference 链接时找不到函数定义,检查 CMake 链接
double free 同一内存释放了两次
STL 迭代器失效 遍历容器时修改了容器结构

第五章:毕设答辩准备

  1. 代码要能跑:答辩现场至少演示一个完整流程
  2. 注释要清楚:关键函数写 Doxygen 风格注释
  3. README.md:放项目介绍、编译方式、运行截图
  4. 版本管理:用 Git 记录开发过程,提交历史也是工作量证明

思考题

  1. shared_ptrunique_ptr 的区别是什么?什么时候该用哪个?
  2. 如何用 CMake 引入第三方库(如 nlohmann/json)?
  3. C++ 中如何处理 CSV 文件的读写?

参考资料

  1. [1] Bjarne Stroustrup. The C++ Programming Language (4th Edition). 2013.
  2. [2] Scott Meyers. Effective Modern C++. 2014.
  3. [3] Anthony Williams. C++ Concurrency in Action (2nd Edition). 2019.
  4. [4] C++ Community. cppreference.com. 2024. https://en.cppreference.com/w/