⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

🔧 C++ 学习路线

105 个互动教程

C++ 入门 — 高性能编程基石

C++:C 超集,面向对象+泛型,游戏/量化/系统底层

C++ 文件流

fstream/ifstream/ofstream 读写文件

C++ 字符串操作

学习C++中C++ 字符串操作 — C++教程的详细用法和最佳实践

C++ std::vector

动态数组:push_back/size/迭代

C++ 类

学习class

C++ STL 容器 — vector/map/set

STL:vector 动态数组、map 字典、algorithm 算法

C++ 模板

template<typename T> 泛型编程

C++ 迭代器

学习C++中C++ 迭代器 — C++教程的详细用法和最佳实践

C++ Lambda

[capture](params)->ret{body}

C++ 异常处理

try/throw/catch + 标准异常类

C++ 移动语义

std::move 避免深拷贝

C++ 智能指针

unique_ptr/shared_ptr/weak_ptr

C++ 多线程

std::thread + mutex + lock_guard

C++ algorithm 算法库

sort/unique/find/count/accumulate

C++ 引用

& 引用 vs 指针、左值/右值引用

C++ 构造函数

学习构造函数

C++ 面向对象

class/构造析构/继承多态/虚函数/抽象类

std::shared_mutex 读写锁

学习 shared_mutex 实现读共享、写独占的并发控制。

std::chrono 时间库

掌握现代 C++ 时间点、时长与时钟的用法。

std::deque 双端队列

了解双端队列在两端高效插入/删除的特性。

C++ 并发编程 async/future

C++并发:std::async异步任务、std::future/std::promise、std::packaged_task、std::shared_future多个等待者、std::launch::async/deferred策略

C++20 三路比较运算符

<=>太空船运算符:三种排序类别(strong_ordering/weak_ordering/partial_ordering)、auto生成比较运算符、与std::sort配合、自定义类型实现

C++17 variant 与 optional

std::variant类型安全联合体、std::visit访问、std::get/std::get_if提取、std::optional可选值(替代null/None)、std::monostate空状态

C++ constexpr 编译期计算进阶

constexpr进阶:constexpr函数限制逐渐放宽(C++11/14/17/20)、constexpr容器(vector在C++20)、constexpr new(C++20)、consteval立即函数

C++ 智能指针深入

C++智能指针深入:unique_ptr独占所有权(move-only/自定义删除器)、shared_ptr共享所有权(控制块/引用计数/循环引用)、weak_ptr打破循环/观察者模式、make_unique/make_shared

C++ 模板元编程

模板元编程:SFINAE替换失败非错误(enable_if/void_t)、变参模板Variadic Templates参数包展开、折叠表达式fold expression(C++17)、if constexpr编译时分支(C++17)、requires(C++20)

C++ 常用设计模式实现

C++设计模式:RAII资源获取即初始化(智能指针/scoped_lock)、PIMPL模式隐藏实现细节/减少编译依赖、CRTP奇异递归模板模式静态多态、Observer观察者模式

C++ 原子操作与内存序

C++原子操作:std::atomic<T>无锁编程、内存序memory_order(relaxed/acquire/release/seq_cst)、CAS(compare_exchange_strong/weak)实现无锁数据结构、happens-before关系

C++ Sanitizers 代码检测

Clang/GCC Sanitizers:AddressSanitizer(ASan堆栈溢出/use-after-free)、UndefinedBehaviorSanitizer(UBSan未定义行为)、ThreadSanitizer(TSan数据竞争)、MemorySanitizer未初始化读取

C++ 自定义内存分配器

C++ Allocator:std::allocator默认分配器、自定义分配器(内存池/pool allocator/arena allocator)、pmr多态内存资源(C++17/memory_resource/monotonic_buffer_resource)

C++17 文件系统库

C++17 filesystem:std::filesystem::path路径操作、create_directory/create_directories、copy/remove/rename、recursive_directory_iterator递归遍历、file_size/last_write_time、与boost.filesystem对比

C++17 any/optional/variant

C++17三种安全类型:std::any任意类型存储(类似void*但安全)、std::optional可空值(替代nullptr/-1哨兵值)、std::variant类型安全联合体(替代union)、适用场景对比

C++20 指定初始化器

C++20指定初始化器(Designated Initializers):.field=value语法指定初始化struct成员、必须按声明顺序赋予、与C99指定初始化器的区别(不支持乱序/数组/嵌套)、聚合初始化改进

C++20 Ranges Views 深入

Ranges Views深入:views::iota生成序列/views::take/views::drop/views::filter/views::transform/views::join展平/views::split分割/自定义view、pipe组合、惰性求值避免拷贝

C++20 span 视图

C++20 std::span:不拥有数据的连续内存视图(类似string_view但泛型/支持修改)、span<T>/span<const T>、静态范围static extent vs动态范围dynamic extent、替代指针+长度的安全接口、subspan子视图

C++23 std::expected 错误处理

C++23 std::expected<T,E>:函数式错误处理(类似Rust Result/Haskell Either)、value()获取值/error()获取错误、and_then/or_else/transform/transform_error单子操作、std::unexpected异常值、替代异常/错误码

C++23 std::stacktrace 调用栈

C++23 std::stacktrace(调试神器):stacktrace::current()获取当前调用栈、stacktrace_entry(source_file/source_line/description)、打印调用栈to_string/operator<<、断言/异常/日志中嵌入调用栈

C++20 constexpr 容器

C++20 constexpr容器革命:constexpr vector/string(编译期动态分配/需在常量表达式结束时释放)、constexpr new/delete、编译期排序/去重/单词统计、constexpr算法全部可用

C++20 std::source_location

C++20 source_location(编译时获取代码位置信息):替代__FILE__/__LINE__/__FUNCTION__宏、source_location::current()静态方法、.file_name()/.line()/.column()/.function_name()、更好的日志库实现

std::partition 分区算法

学习用 partition 将容器元素按条件分为两组。

C++23 std::mdspan 多维视图

C++23 mdspan多维数组视图(不拥有数据/类似span的多维版):extents定义维度/布局Layout(行主序/列主序)/访问运算符(i,j)、与BLAS/LAPACK库集成、替代vector<vector<T>>(连续内存/无二次分配)

C++23 std::print 现代打印

C++23 std::print/println(类型安全的现代打印/替代printf/cout):print('Hello {}!',name)、格式字符串编译时验证、输出到FILE*或stdout、比cout运算符<<更简洁/比printf类型安全

C++ type_traits 类型特征

C++ type_traits类型特征:编译时查询类型信息(is_integral/is_floating_point/is_pointer/is_class/is_enum/is_same/is_base_of/is_convertible/is_constructible)、类型变换(remove_const/remove_reference/add_pointer/decay/conditi

C++20 Ranges 算法 | 管道风格

Ranges算法(std::ranges命名空间/直接接受range不需要begin/end):ranges::sort/ find/ count/ copy/ transform/ for_each/ any_of/all_of/none_of、Projection投影(lambda作为第四参数/编译时选择字段)、与管道适配器组合ranges::to<vector>()(C++23)

C++23 [[assume]] 属性

C++23 [[assume(condition)]]编译器优化假设断言(类似__builtin_assume/__assume):告知编译器condition在运行时一定为true(产生更优化的代码但错误假设导致未定义行为UB/用于性能关键路径优化)、与assert区别(debug检查 vs 优化提示)

C++23 optional 单子操作

C++23 std::optional单子操作:.and_then(f)(成功则继续计算返回optional<T>)/.or_else(f)(失败换用备选值返回optional<T>)/.transform(f)(成功映射转换值类型,变换T→U),链式错误处理优雅模式

C++23 views pipe 深入

C++23 ranges views管道深入:views::adjacent/views::adjacent_transform相邻元素、views::slide滑动窗口、views::enumerate枚举索引元素对、views::zip/zip_transform多范围并行迭代压缩、views::as_const常量视图、views::cartesian_product笛卡尔积

std::priority_queue 堆

掌握优先队列(最大堆/最小堆)的基本操作。

C++ Concepts:模板约束的现代化

学习如何使用C++20概念对模板参数进行精确约束,提升代码可读性和错误提示质量。

C++20 协程:异步编程新范式

理解协程的基本概念、co_await、co_yield和co_return的用法,并构建简单的生成器。

C++20 Ranges:声明式数据管道

学习使用范围库进行惰性求值、视图组合和算法管道操作,告别传统迭代器。

C++ 入门 — 开发环境与第一个程序

C++简介、编译器安装(g++/MinGW/MSVC)、IDE选择(VS Code/CLion/Visual Studio)、第一个Hello World程序、编译运行流程

C++20 std::format:类型安全的字符串格式化

掌握std::format的语法、占位符、格式说明符,替代printf和iostream。

C++ 输入输出 — cin/cout

C++标准输入输出:cout输出(<<运算符/endl换行/setw格式化)、cin输入、getline读取整行、iomanip格式化(fixed/setprecision)、文件重定向

C++20 std::span:非拥有型数组视图

学习使用span作为连续序列的轻量级抽象,避免指针和数组退化问题。

C++ string 字符串类

C++ string类:构造/赋值/拼接/比较、length/size、substr/find/replace、getline读取、to_string数值转字符串、stoi/stod字符串转数值、C风格字符串对比

C++17 std::variant:类型安全的联合体

理解variant的构造、访问和访问者模式,替代传统union和类型擦除。

C++17 std::optional:优雅处理可能缺失的值

学习optional的构造、访问和错误处理,替代指针或哨兵值表示可选结果。

C++17 std::string_view:高效的字符串引用

掌握string_view的用法、优势及注意事项,避免不必要的字符串拷贝。

C++ STL 算法库 algorithm

STL算法:sort排序(自定义比较)、find/find_if查找、count/count_if计数、copy复制、transform转换、remove/remove_if+erase删除、for_each遍历、lambda表达式

C++20 三向比较:太空船运算符

学习operator<=>和std::compare_three_way,自动生成比较运算符。

C++ 面向对象:构造函数与析构函数

C++构造/析构:默认/有参/拷贝/移动构造函数、初始化列表(:)、析构函数、=default/=delete、RAII资源管理思想、explicit防止隐式转换

C++20 模块:现代化组件系统

学习使用import和export关键字组织代码,替代传统头文件。

C++ 智能指针详解

C++智能指针:unique_ptr(独占所有权/移动语义)、shared_ptr(共享所有权/引用计数/control block)、weak_ptr(打破循环引用/不增加计数)、make_unique/make_shared

C++ 移动语义与右值引用

C++11移动语义:左值/右值/将亡值、std::move、移动构造函数/移动赋值运算符、noexcept规范、完美转发std::forward、emplace_back高效构造

C++ 异常安全保证

C++异常安全:基本保证/强保证/不抛出保证(noexcept)、RAII资源管理防止泄漏、拷贝交换惯用法copy-and-swap、异常规范、std::exception_ptr传递异常

基于模板元编程的静态反射机制

利用模板特化与宏的组合,在编译期模拟结构体字段名与类型的映射,实现类似反射的字段遍历与序列化。

协程驱动的后台任务调度器

使用C++20无栈协程实现一个轻量级任务系统,支持异步延迟、取消与优先级调度,不依赖外部线程池。

std::variant驱动的编译期多态

避免虚函数开销,利用variant+visit+overloaded模式实现类型安全的异构容器与算法分发。

编译期数学库:consteval与常量求值

利用consteval与constexpr在编译期实现三角函数、平方根等函数,用于静态数组长度或模板参数。

定制化内存池:小对象分配器

实现固定大小块的自由链表内存池,避免malloc碎片和锁竞争,用于高频创建/销毁的小对象场景。

编译期JSON解析器

利用constexpr字符串处理与递归下降解析,在编译期将JSON文本转为结构化类型,用于配置注入。

链式异步编排:fut::then实现

基于std::future与std::promise,实现类似JavaScript Promise的链式then回调,支持异常传递。

固定容量静态向量:boost::static_vector实现

实现一个栈上分配的动态大小但容量固定的连续容器,避免堆分配,适用于嵌入式与实时系统。

std::integer_sequence与类型擦除

利用参数包展开与tuple实现任意类型列表的编译期索引访问,模拟动态语言的数组异质特性。

SFINAE驱动条件式序列化框架

利用SFINAE检测类型是否具有特定成员函数,自动选择序列化路径(JSON/二进制),无需手动注册。

模板模板参数:让模板像函数参数一样传递

深入探讨C++模板参数中嵌套模板的用法,揭示如何通过template template parameters实现更灵活的泛型编程模式,从而构建高度可复用的容器适配器。

SFINAE:通过模板替换失败实现编译期分支

介绍C++中Substitution Failure Is Not An Error原理,展示如何利用enable_if和decltype在编译期选择函数重载,从而编写类型安全的泛型代码。

折叠表达式:变参模板的优雅化简

详解C++17折叠表达式如何简化变参模板的递归展开,支持二元操作符的左折叠与右折叠,实现参数包的高效合并、查找与聚合。

定位new与内存池:自定义对象生命周期管理

超越常规new/delete,探索定位new在预分配缓冲区上构造对象的能力,并基于此设计高效的内存池,避免频繁系统调用。

constexpr if:编译期分支决策消除模板膨胀

讲解C++17的constexpr if语句如何在编译期根据常量表达式选择代码路径,替代SFINAE和标签分发,让泛型代码更直观。

[[likely]]与[[unlikely]]:分支预测提示优化性能

介绍C++20引入的分支预测属性,展示如何向编译器提示哪些分支更可能被执行,从而优化流水线,适合错误处理与热点路径。

原子智能指针:lock-free的无锁数据共享

探讨std::atomic<std::shared_ptr>和std::atomic_ref在并发环境下安全修改共享指针,避免锁竞争并保证内存序正确。

协程生成器:惰性序列与异步流处理

利用C++20协程实现一个生成器(generator)类,演示如何暂停执行并yield值,构建惰性求值的序列,连接异步事件驱动模型。

编译期反射:用模板元编程解析结构体成员

不依赖运行时RTTI,展示如何利用宏和模板技巧在编译期枚举结构体成员名称、类型与偏移,实现序列化与日志的零开销抽象。

并行策略与执行策略:C++17的算法加速器

深入std::execution::par、unseq等执行策略,展示如何零改动地将标准算法转换为并行或向量化版本,并讨论数据竞争与性能陷阱。

值类别与生命周期延长的隐藏规则

深入C++的值类别(lvalue、xvalue、prvalue)与临时对象生命周期的交互,揭示引用绑定与const引用延长临时对象的具体机制。

参数包的正则表达式模式匹配

利用C++17的折叠表达式与编译期字符串操作,实现变长模板参数包的编译期正则风格模式匹配。

原子类型与信号处理器的无锁通信

讲解std::atomic与std::sig_atomic_t的正确用法,在信号处理器与主线程之间安全传递状态。

CRTP模式实现类型安全的单例继承链

用奇异递归模板模式(CRTP)构建可继承的、类型安全的单例基类,解决传统单例的继承问题。

volatile在多线程中的真正作用与误用

澄清volatile不提供原子性或内存序,讲解其正确用途(阻止编译器优化、映射内存映射I/O)与线程安全工具的根本区别。

编译期字符串哈希与查表引擎

编写constexpr函数在编译期计算字符串哈希值,并构建完美的switch-case映射,实现零运行时开销的字符串分派。

嵌套不完整类型与Pimpl惯用法的深度变体

利用前向声明和嵌套类的特性,实现编译期防火墙的极致版本,包含unique_ptr对不完整类型的支持细节。

类专属operator new重载与内存池整合

为特定类重载全局或成员operator new/delete,并接入固定大小的内存池,提升小对象分配性能。

移动迭代器与懒惰变换视图的内部机制

剖析std::move_iterator与std::ranges::transform_view的实现细节,理解移动语义如何与迭代器适配器交互。

深入 new 表达式:自定义分配与释放钩子

本教程讲解 C++ 中 new 表达式底层的分配机制,并演示如何通过替换 operator new 和 operator delete 实现全局或类级别的内存分配钩子,用于监控、记录或限制动态内存使用。

函数参数传递的 ABI 优化:寄存器、堆栈与合成类型

本教程揭示 C++ 函数参数在底层(x86-64 / ARM64)如何通过寄存器与堆栈传递,并讲解如何利用 ABI 规则优化内联、避免不必要的拷贝,以及 synthetic(合成)类型对传递开销的影响。

定位 new 与显式析构:在原始内存中构建与析构对象

本教程讲解 placement new 语法:在已分配的内存上构造对象,以及如何手动调用析构函数。这是实现自定义容器、内存池或对象池的核心技术,也是标准分配器与 polymorphic allocator 的基础。

Lambda 的生命周期陷阱:按引用捕获与悬挂引用

本教程深入分析 lambda 捕获局部变量([&] 或 [&x])时,若 lambda 存活超过被捕获变量的生命期,会产生悬挂引用。介绍如何利用 std::shared_from_this 和复制捕获避免此问题,以及 C++14 泛型 lambda 中的特殊情形。

线程局部存储 (thread_local) 的实现与陷阱

本教程讲解 C++11 引入的 thread_local 关键字,它的底层实现通常依赖 TLS(线程局部存储)或 __thread,并讨论初始化顺序、动态库中的行为、以及性能开销—尤其是跨平台不一致性。

异常展开 (Stack Unwinding) 的代价与禁用优化

本教程解释抛出异常时编译器需要生成展开表(unwind table)和清理代码,导致即使不抛出异常,函数体积与寄存器压力也增加。分析如何通过 noexcept、异常规范以及 /EHs 与 /EHsc 区别来优化,以及何时应避免使用异常。

具名返回值优化 (NRVO) 与未具名返回值优化 (URVO) 的触发条件

本教程区别 NRVO(具名局部变量返回)与 URVO(临时对象返回)的编译器实现条件,包括哪些情况下保证复制消除(C++17),哪些情况仅仅允许但可能失败,以及如何检验是否发生了优化。

std::any 的实现原理:类型擦除与小对象优化

本教程讲解 std::any 如何通过类型擦除(type erasure)存储任意类型,以及小对象优化(SBO)机制:对于小于等于某个大小的类型直接存储在内部缓冲,避免堆分配。还会探讨虚函数 vs 函数指针的取舍。

constexpr if 与 SFINAE 的恩怨:现代编译期分支

本教程介绍 constexpr if (C++17) 如何替代许多传统的 SFINAE(Substitution Failure Is Not An Error)技巧,通过实例对比两者的语法与能力,并解释 constexpr if 不能完全替代 SFINAE 的少数场景(如偏特化、返回类型推导)。

原子操作与信号安全:std::atomic_signal_fence 的正确用法

本教程讲解 C++ 中信号处理器与主线程间的同步机制,介绍 std::atomic_signal_fence(非原子内存栅栏)与 std::atomic_thread_fence 的区别,以及如何利用它安全地在信号处理函数中访问共享标志。

🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 105 篇
0 完成
🔥 0