<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cpp on PlumePHP</title><link>https://plumephp.com/categories/cpp/</link><description>Recent content in Cpp on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 10 Sep 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/categories/cpp/index.xml" rel="self" type="application/rss+xml"/><item><title>C++ 内存模型深度解析：从栈堆到对象生命周期</title><link>https://plumephp.com/cpp-memory-model/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-memory-model/</guid><description>&lt;p&gt;C++ 是一门赋予了开发者底层内存控制能力的语言。理解其内存模型不仅是编写高效代码的基础，更是排查复杂 bug、设计高性能系统的关键。本文将系统性地剖析 C++ 的内存布局、RAII 设计哲学、对象生命周期管理、内存对齐细节、对象切片问题以及 Placement New 技术，最后给出符合现代 C++ 风格的内存管理建议。&lt;/p&gt;</description></item><item><title>C++ 原子操作与内存序：从无锁编程到内存屏障</title><link>https://plumephp.com/cpp-atomic-memory-order/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-atomic-memory-order/</guid><description>&lt;h2 id="为什么需要无锁编程"&gt;为什么需要无锁编程&lt;/h2&gt;
&lt;p&gt;在多线程程序中，互斥锁（mutex）是最常用的同步原语，但它并非银弹。当线程竞争锁失败时，操作系统会将其挂起，引发一次开销可观的上下文切换。在高度竞争的场景下，多个线程反复获取和释放同一把锁，还会导致&lt;strong&gt;缓存行颠簸&lt;/strong&gt;（cache line bouncing）——锁变量所在的缓存行在各个 CPU 核心之间来回迁移，严重损害性能。&lt;/p&gt;</description></item><item><title>C++ 基础语法快速回顾：从 C 到 C++ 的范式转变</title><link>https://plumephp.com/cpp-language-basics/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-language-basics/</guid><description>&lt;blockquote&gt;
&lt;p&gt;本文假设你已具备 C 语言基础。我们将聚焦于 C++ 相对于 C 的核心扩展——这些扩展不仅是语法增量，更是编程范式的根本转变。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="一引用referencec-最基础也最重要的扩展"&gt;一、引用（Reference）：C++ 最基础也最重要的扩展&lt;/h2&gt;
&lt;h3 id="11-引用的本质"&gt;1.1 引用的本质&lt;/h3&gt;
&lt;p&gt;引用不是&amp;quot;指向变量的指针&amp;quot;，而是&lt;strong&gt;变量的别名&lt;/strong&gt;——它与原变量共享同一段内存，且绑定后不可更改。&lt;/p&gt;</description></item><item><title>C++ 多线程基础：std::thread、互斥量与条件变量</title><link>https://plumephp.com/cpp-threading-basics/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-threading-basics/</guid><description>&lt;p&gt;C++11 标准库对并发编程进行了系统性重构，引入了 &lt;code&gt;&amp;lt;thread&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;mutex&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;condition_variable&amp;gt;&lt;/code&gt; 等核心头文件，让开发者无需依赖平台特定的 pthread 或 Win32 API，即可编写可移植的多线程代码。在此之前，C++ 开发者通常需要借助 Boost.Thread 或者直接调用操作系统底层 API，不仅代码可移植性差，而且容易因平台差异引入难以排查的 Bug。本文将从 &lt;code&gt;std::thread&lt;/code&gt; 的创建与管理讲起，逐步深入到互斥量的各种类型、条件变量的正确使用方式，以及经典的生产者-消费者模式的完整实现，帮助读者建立扎实且实用的 C++ 并发编程基础。&lt;/p&gt;</description></item><item><title>C++ 工程实践：代码规范、测试与包管理</title><link>https://plumephp.com/cpp-engineering-practices/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-engineering-practices/</guid><description>&lt;p&gt;C++ 作为一门兼具高性能与复杂性的系统级语言，工程化实践直接关系到代码的可维护性、健壮性和团队协作效率。本文从代码规范、静态分析、单元测试、覆盖率、包管理和 CI/CD 六个维度，梳理现代 C++ 项目的工程实践体系。&lt;/p&gt;</description></item><item><title>C++ 并发设计模式：线程池、Future 与异步编程</title><link>https://plumephp.com/cpp-concurrency-patterns/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-concurrency-patterns/</guid><description>&lt;p&gt;C++11 的发布标志着现代 C++ 并发编程的开端。在此之前，开发者需要依赖平台特定的接口（如 POSIX pthreads 或 Windows API）来编写多线程程序，这不仅带来代码可移植性的问题，更使得并发逻辑与业务逻辑纠缠在一起。如今，C++ 标准库提供了丰富而统一的并发原语，从 &lt;code&gt;std::thread&lt;/code&gt; 到 &lt;code&gt;std::async&lt;/code&gt;，再到 C++20 的协程，构建了一套完整的异步编程范式体系。本文将系统梳理 C++ 中核心的并发设计模式，剖析其原理、使用场景与陷阱，并最终通过线程池实现并行计算框架，展示如何将这些工具组合成可复用的工程方案。&lt;/p&gt;</description></item><item><title>C++ 性能剖析与优化：从 Cache 友好到 SIMD</title><link>https://plumephp.com/cpp-performance-optimization/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-performance-optimization/</guid><description>&lt;p&gt;性能优化是 C++ 开发中最具挑战性也最有成就感的领域之一。然而，Donald Knuth 的名言 &amp;ldquo;Premature optimization is the root of all evil&amp;rdquo; 提醒我们：在盲目优化之前，必须先测量。没有数据支撑的优化，往往是徒劳甚至有害的。&lt;/p&gt;</description></item><item><title>C++ 模板与泛型编程：从函数模板到 SFINAE</title><link>https://plumephp.com/cpp-templates-generics/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-templates-generics/</guid><description>&lt;p&gt;&lt;strong&gt;目录：&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;函数模板与参数推导&lt;/li&gt;
&lt;li&gt;类模板与偏特化&lt;/li&gt;
&lt;li&gt;类型萃取与自定义检测&lt;/li&gt;
&lt;li&gt;SFINAE 原理与 &lt;code&gt;std::enable_if&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;CRTP：静态多态&lt;/li&gt;
&lt;li&gt;表达式 SFINAE 与检测惯用法&lt;/li&gt;
&lt;li&gt;综合实战示例&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;p&gt;C++ 模板不仅是泛型编程的基础，更是元编程的入口。从简单的函数模板到复杂的 SFINAE 技巧，模板系统让类型本身成为可计算的对象。本文将系统梳理函数模板、类模板、类型萃取、SFINAE、CRTP 等核心概念，并给出可直接编译运行的代码示例。&lt;/p&gt;</description></item><item><title>C++ 编译与链接原理：从预处理到可执行文件</title><link>https://plumephp.com/cpp-compilation-linking/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-compilation-linking/</guid><description>&lt;p&gt;C++ 被誉为&amp;quot;零开销抽象&amp;quot;的语言，但代价是编译模型极其复杂。本文将从预处理到可执行文件的完整链路出发，深入剖析编译与链接的底层机制。&lt;/p&gt;</description></item><item><title>C++11/14 核心特性：Lambda、智能指针与右值引用</title><link>https://plumephp.com/cpp-modern-11-14/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-modern-11-14/</guid><description>&lt;p&gt;C++11 是 C++ 历史上最具里程碑意义的版本更新之一，它从根本上改变了我们编写 C++ 代码的方式。随后的 C++14 则在 C++11 的基础上进行了一系列实用的补充与完善。本文将深入剖析 C++11/14 的核心特性，帮助你全面理解现代 C++ 的设计哲学。&lt;/p&gt;</description></item><item><title>C++17/20/23 进阶特性：结构化绑定、Concept 与模块</title><link>https://plumephp.com/cpp-modern-17-20-23/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-modern-17-20-23/</guid><description>&lt;p&gt;C++ 自 C++11 以来进入了一个快速演进的阶段，每隔三年发布一个新标准，每个版本都带来大量语法改进和库增强。对于习惯了传统 C++ 的开发者来说，C++17、C++20 和 C++23 中引入的许多特性不仅大幅提升了代码的表达力，还改变了编写和思考问题的方式。本文将系统梳理这三个版本中最重要的进阶特性，并配有可直接编译运行的代码示例，帮助你从传统 C++ 平稳过渡到现代 C++ 的实践者行列。&lt;/p&gt;</description></item><item><title>CMake 工程化实战：从单文件到大型项目</title><link>https://plumephp.com/cpp-cmake-project/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-cmake-project/</guid><description>&lt;h2 id="为什么是-cmake"&gt;为什么是 CMake&lt;/h2&gt;
&lt;p&gt;C++ 生态长期缺乏统一的构建工具。Make 语法晦涩且难以跨平台，Ninja 需要先生成规则，各 IDE 的专属项目文件更是互不兼容。CMake 的价值在于它充当了一个&amp;quot;元构建系统&amp;quot;——用一套声明式脚本描述项目结构，再生成平台原生的构建文件（Makefile、Ninja、Visual Studio 工程、Xcode 工程）。如今在 GitHub 上搜索主流 C++ 开源项目，超过七成使用 CMake 作为首选构建系统，它已是事实上的行业标准。&lt;/p&gt;</description></item><item><title>STL 容器全解析与源码剖析</title><link>https://plumephp.com/cpp-stl-containers/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-stl-containers/</guid><description>&lt;blockquote&gt;
&lt;p&gt;容器是 C++ 标准库中最常用的组件，但&amp;quot;会用&amp;quot;与&amp;quot;懂原理&amp;quot;之间隔着巨大的性能鸿沟。本文从内存布局、增长策略和迭代器失效规则三个维度，深度剖析 sequence / associative / adapter 三大类容器的实现细节，帮助你在工程实践中做出正确的选择。&lt;/p&gt;</description></item><item><title>STL 算法与迭代器：从 for_each 到并行执行策略</title><link>https://plumephp.com/cpp-stl-algorithms/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-stl-algorithms/</guid><description>&lt;p&gt;C++ 标准模板库（STL）的核心设计哲学是将数据结构与算法解耦。迭代器作为两者之间的桥梁，使得同一套算法能够作用于向量、列表、数组甚至输入流等完全不同的容器。理解迭代器的分类体系，是正确使用 STL 算法、避免性能陷阱的第一步。&lt;/p&gt;</description></item><item><title>模板元编程与编译期计算：TMP 实战指南</title><link>https://plumephp.com/cpp-metaprogramming/</link><pubDate>Thu, 10 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/cpp-metaprogramming/</guid><description>&lt;p&gt;模板元编程（Template Metaprogramming，TMP）是 C++ 中最独特也最令人生畏的特性之一。它把模板系统变成了一台在编译期运行的图灵机，让程序员可以在编译阶段完成类型计算、算法推导和代码生成。本文将系统性地讲解 TMP 的核心原理与实战技巧，并探讨 C++20 Concepts 时代的演进方向。&lt;/p&gt;</description></item><item><title>C++ 系统编程专题：从现代 C++ 到底层高性能工程</title><link>https://plumephp.com/posts/cpp/</link><pubDate>Tue, 01 Sep 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/posts/cpp/</guid><description>&lt;blockquote&gt;
&lt;p&gt;C++ 是唯一一门同时提供&amp;quot;零成本抽象&amp;quot;与&amp;quot;直接操作硬件&amp;quot;能力的工业级语言。从 Linux 内核模块到游戏渲染引擎，从高频交易系统到自动驾驶感知栈——C++ 始终是性能敏感场景的默认选择。&lt;/p&gt;</description></item></channel></rss>