<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>技术 on kenji.blog</title><link>http://kenji.blog/zh-cn/tags/%E6%8A%80%E6%9C%AF/</link><description>Recent content in 技术 on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 05 Sep 2026 22:10:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/zh-cn/tags/%E6%8A%80%E6%9C%AF/index.xml" rel="self" type="application/rss+xml"/><item><title>【完全解剖】什么是量子计算机？〜从零开始理解终极计算原理〜</title><link>http://kenji.blog/zh-cn/p/quantum-computer-basics/</link><pubDate>Sat, 05 Sep 2026 22:10:00 +0900</pubDate><guid>http://kenji.blog/zh-cn/p/quantum-computer-basics/</guid><description>&lt;img src="http://kenji.blog/p/quantum-computer-basics/quantum_basics_eyecatch_1788613712487.jpg" alt="Featured image of post 【完全解剖】什么是量子计算机？〜从零开始理解终极计算原理〜" />&lt;h2 id="前言量子计算机带来的计算范式转变">前言：量子计算机带来的“计算范式转变”
&lt;/h2>&lt;p>近年来，我们在新闻和技术文章中几乎每天都能看到“量子计算机”这个词。“现在的超级计算机需要计算几千年的问题，它只需几分钟就能完成”、“现有的密码技术可能会全部被破解”等仿佛科幻电影般的故事被传得神乎其神。从Google、IBM、Microsoft等大型IT企业，到世界各地的大学和初创公司，都在为这项梦幻技术的实用化而展开激烈竞争。&lt;/p>
&lt;p>然而，如果被问到“量子计算机到底是什么？”，恐怕很少有人能准确回答。许多人可能都有“能够同时计算所有组合的魔法盒子”这样模糊的印象，但严格来说，这是不正确的。&lt;/p>
&lt;p>在本文中，我们将从基础开始，彻底且专业但通俗易懂地解说量子计算机与经典计算机（我们平时使用的PC或智能手机）在根本上有什么区别，以及它是如何将“叠加态（Superposition）”、“量子纠缠（Entanglement）”、“量子门（Quantum gates）”等量子力学的奇妙现象应用于计算的。当您读完这篇文章时，应该就能清楚地理解量子计算机真正的厉害之处以及目前面临的挑战。&lt;/p>
&lt;hr>
&lt;h2 id="第1章经典计算机与量子计算机的决定性差异">第1章：经典计算机与量子计算机的决定性差异
&lt;/h2>&lt;p>为了理解量子计算机的原理，我们首先需要复习一下我们目前使用的“经典计算机”是如何运作的。&lt;/p>
&lt;h3 id="比较表经典计算机-vs-量子计算机">比较表：经典计算机 vs 量子计算机
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>项目&lt;/th>
&lt;th>经典计算机&lt;/th>
&lt;th>量子计算机&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>基本单位&lt;/strong>&lt;/td>
&lt;td>比特 (0 或 1)&lt;/td>
&lt;td>量子比特 (0和1的叠加)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>状态表现&lt;/strong>&lt;/td>
&lt;td>确定性&lt;/td>
&lt;td>概率性（在观测之前不确定）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>计算方式&lt;/strong>&lt;/td>
&lt;td>串行处理（并行化需要物理核心）&lt;/td>
&lt;td>量子并行性（同时操作指数级的状态）&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>擅长的计算&lt;/strong>&lt;/td>
&lt;td>四则运算、日常数据处理&lt;/td>
&lt;td>质因数分解、量子化学计算&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>容错能力&lt;/strong>&lt;/td>
&lt;td>非常强&lt;/td>
&lt;td>非常弱（需要极低温环境或纠错）&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="经典计算机的世界非0即1的比特bit">经典计算机的世界：非0即1的“比特（Bit）”
&lt;/h3>&lt;p>经典计算机将所有信息表示为“0”或“1”的状态。这被称为 &lt;strong>比特（Bit）&lt;/strong>。在物理上，它由半导体芯片上晶体管电压的高（1）或低（0）来表示。
你智能手机里的高清照片、现在正在阅读的这篇文章，甚至是你最喜欢的YouTube视频，归根结底都可以还原为庞大的“0和1的排列”。计算，无非是将AND（逻辑与）、OR（逻辑或）、NOT（逻辑非）等基本逻辑电路组合起来，对这些0和1的排列进行操作的过程。
这是一个非常确定且决定论的世界。只要输入相同，就必定能得到相同的输出。&lt;/p>
&lt;h3 id="量子计算机的世界既是0又是1的量子比特qubit">量子计算机的世界：既是0又是1的“量子比特（Qubit）”
&lt;/h3>&lt;p>另一方面，量子计算机的最小信息单位被称为 &lt;strong>量子比特（Qubit：Quantum bit）&lt;/strong>。
量子比特最大的特点在于，它不像经典比特那样只能处于“0”或“1”的其中一种状态，而是可以呈现出“0和1以特定概率混合的状态”。这被称为 &lt;strong>“叠加态（Superposition）”&lt;/strong>。&lt;/p>
&lt;p>例如，如果把经典比特比作抛出后只能是“正面”或“反面”朝上的硬币，那么量子比特经常被比作“在空中持续旋转的硬币”。旋转中的硬币既不能说是正面也不能说是反面，两者的状态叠加在一起。只有当硬币掉落在地板上停止运动的瞬间（这在量子力学中被称为“观测”），它到底是“正面”还是“反面”才会被确定下来。&lt;/p>
&lt;p>量子计算机正是将这种微观世界（量子力学）特有的“在观测之前状态不确定”的性质，直接融入到了信息处理的过程中。&lt;/p>
&lt;hr>
&lt;h2 id="第2章从根本上改变计算的3个量子力学性质">第2章：从根本上改变计算的3个量子力学性质
&lt;/h2>&lt;p>量子计算机惊人计算能力的源泉，并不仅仅是因为它的时钟频率高或者部件小，而在于它将物理法则本身作为计算资源来利用。以下3个量子力学现象是关键。&lt;/p>
&lt;h3 id="1-叠加态superposition与指数级的信息量">1. 叠加态（Superposition）与指数级的信息量
&lt;/h3>&lt;p>如前所述，量子比特可以同时保持0和1两种状态。1个量子比特是“0和1的叠加”，那么增加量子比特的数量会怎样呢？&lt;/p>
&lt;ul>
&lt;li>1个量子比特：2个状态（0, 1）的叠加&lt;/li>
&lt;li>2个量子比特：4个状态（00, 01, 10, 11）的叠加&lt;/li>
&lt;li>3个量子比特：8个状态的叠加&lt;/li>
&lt;li>&lt;strong>N个量子比特：$2^N$个模式的叠加&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>如果只有50个量子比特，就能同时保持$2^{50}$（约1100万亿）个状态。而仅仅300个量子比特，就能一次性保持$2^{300}$个（比宇宙中所有原子的总数还要多！）模式。这种指数级的信息保持能力，构成了量子计算机潜力的基础。要在经典计算机的内存中记住比宇宙原子数量还多的状态，在物理上是不可能的。&lt;/p>
&lt;h3 id="2-量子纠缠entanglement幽灵般的超距作用">2. 量子纠缠（Entanglement）：幽灵般的超距作用
&lt;/h3>&lt;p>量子纠缠是一种极其违背人类直觉的奇妙现象，甚至连爱因斯坦都称其为“幽灵般的超距作用（Spooky action at a distance）”而终生无法接受。&lt;/p>
&lt;p>当多个量子比特进入“量子纠缠”状态时，它们之间会产生强烈的联系，变成一种命运共同体般的关系： &lt;strong>“只要其中一个状态确定了，无论它们相隔多远，另一个的状态也会瞬间确定下来”&lt;/strong>。&lt;/p>
&lt;p>例如，假设有两个处于纠缠状态的量子比特A和B（它们分别处于0和1的叠加态）。如果我们观测A发现它是“0”，那么超越信息传递速度极限的光速，B的状态也会瞬间确定下来（比如必定成为“1”）。
量子计算机就是通过利用这种量子纠缠，来表达多个量子比特之间复杂的关联性，并进行超并行的数据处理。如果没有纠缠，量子计算机的计算能力将与经典计算机没有多大区别。&lt;/p>
&lt;h3 id="3-量子干涉quantum-interference让正确答案浮现的魔法">3. 量子干涉（Quantum Interference）：让正确答案浮现的魔法
&lt;/h3>&lt;p>你可能会想：“既然能同时保持所有模式，那只要一次性并行计算，瞬间就能得出答案了吧？”这是对量子计算机最常见的误解。
即使在叠加状态下进行了计算，为了最终知道答案，我们还是必须要“观测”。但在观测的瞬间，状态会随机坍缩成$2^N$个模式中的某一个。这样一来，只会得出一个随便的（随机的）答案。&lt;/p>
&lt;p>这时就要用到 &lt;strong>“量子干涉（Interference）”&lt;/strong> 了。利用波和波碰撞时，波长一致的地方会相互增强，错开的地方会相互抵消的现象（这在本质上与降噪耳机的原理相同）。&lt;/p>
&lt;p>优秀的“量子算法”会在计算过程中巧妙地操作量子态，使得 &lt;strong>“导向正确答案的状态（波）的概率振幅相互增强（放大）”，“导向错误答案的状态的概率振幅相互抵消（相消）”&lt;/strong>。从而确保在最终观测时，“正确答案”能以无限接近100%的概率掉落出来。设计好这种干涉过程，正是量子编程的精髓所在。&lt;/p>
&lt;hr>
&lt;h2 id="第3章如何进行计算量子门与量子电路">第3章：如何进行计算？“量子门”与“量子电路”
&lt;/h2>&lt;p>就像经典计算机使用逻辑门（AND、OR、NOT等）来进行计算一样，量子计算机也是通过对量子比特施加被称为 &lt;strong>“量子门（Quantum Gates）”&lt;/strong> 的操作来进行计算的。将多个量子门组合在一起就称为 ** 量子电路（Quantum Circuit）**。&lt;/p>
&lt;p>量子比特的状态可以用数学上称为“布洛赫球面（Bloch sphere）”的三维球体表面上的一个点来表示。北极是“0”，南极是“1”，赤道上则是“0和1各占一半的叠加态”。所谓量子门，无非就是在球体表面上旋转状态（向量）的操作。&lt;/p>
&lt;p>让我们来介绍几个代表性的量子门。&lt;/p>
&lt;h3 id="1-阿达马门h门">1. 阿达马门（H门）
&lt;/h3>&lt;p>这是量子计算机独有的、最基本的一种门，在经典计算机中并不存在。如果让状态完全是“0”的量子比特通过H门，就能制造出0和1被观测到的概率正好各占一半的“完全叠加态”（布洛赫球面上赤道上的点）。作为量子计算的初始化步骤，许多算法一开始都会先将H门应用于所有的量子比特。&lt;/p>
&lt;h3 id="2-泡利门x-y-z门">2. 泡利门（X, Y, Z门）
&lt;/h3>&lt;p>这些门包含了相当于经典计算机中NOT门（将0翻转为1，1翻转为0）的操作。在布洛赫球面上，它们相当于围绕X轴、Y轴、Z轴旋转180度的操作。特别是X门，它会将北极（0）翻转到南极（1），因此作用与经典的NOT门完全相同。而Z门的作用是翻转叠加态的“相位（类似于波的节奏）”，在引发量子干涉时极其重要。&lt;/p>
&lt;h3 id="3-cnot门受控非门">3. CNOT门（受控非门）
&lt;/h3>&lt;p>这是用于制造量子纠缠的极其重要的门。它使用两个量子比特（控制比特和目标比特）。
它的运作方式是：“如果控制比特为1，则翻转目标比特的状态（X门）。如果控制比特为0，则什么都不做。”乍一看这只是个简单的IF条件分支，但如果控制比特处于“0和1的叠加态”会怎样呢？目标比特将变成“被翻转和未被翻转的叠加态”，两个比特的命运完全联系在一起。两个量子比特就完美地“纠缠”了。&lt;/p>
&lt;p>像音乐乐谱一样从左到右依次配置并应用这些门，就能执行复杂的算法。&lt;/p>
&lt;hr>
&lt;h2 id="第4章量子计算机擅长什么不擅长什么">第4章：量子计算机擅长什么，不擅长什么？
&lt;/h2>&lt;p>这里要告诉大家一个重要的事实：量子计算机并不是万能的神。
在网页浏览、视频渲染、Excel宏处理或一般智能手机应用的运行等日常任务中，量子计算机可能永远无法超越经典计算机。对于这些串行处理任务，已经高度优化、拥有压倒性速度和低廉成本的经典计算机更为适合。&lt;/p>
&lt;p>量子计算机只有在面对 &lt;strong>“那些经典计算机在计算组合时会呈指数级爆炸，以至于需要花费宇宙寿命般漫长时间的特定问题”&lt;/strong> 时，才能发挥其真正的价值。这被称为“量子霸权（Quantum Supremacy）”或“量子优势（Quantum Advantage）”。&lt;/p>
&lt;h3 id="量子计算机擅长的事情杀手级应用">量子计算机擅长的事情（杀手级应用）
&lt;/h3>&lt;h4 id="1-质因数分解与密码破解shor算法">1. 质因数分解与密码破解（Shor算法）
&lt;/h4>&lt;p>目前，保护互联网安全通信（如信用卡支付、个人信息传输等）的“RSA密码”等，是建立在“使用经典计算机对巨大数字进行质因数分解实际上是不可能的（需要极其庞大的时间）”这一前提之上的。
然而，如果使用1994年数学家彼得·秀尔（Peter Shor）发现的“Shor算法”，量子计算机就能巧妙利用干涉，以惊人的速度（多项式时间）破解它。因此，未来的现有密码体系有崩溃的风险，世界各地的中央银行和政府机构正急于向“抗量子密码（Post-Quantum Cryptography）”过渡。&lt;/p>
&lt;h4 id="2-量子化学计算与新材料新药开发">2. 量子化学计算与新材料、新药开发
&lt;/h4>&lt;p>自然界中分子和原子的行为，原本就遵循量子力学的法则。如果试图用经典计算机来模拟复杂分子的行为，电子之间相互作用的组合将会爆炸，即使是相对较小的分子也会触及计算量的极限。
正如诺贝尔物理学奖得主理查德·费曼所说：“如果你想模拟自然，你就必须用量子力学来构建它”，量子计算机在物质模拟方面能够发挥出压倒性的原生力量。人们期待它能带来解决人类面临课题的突破，比如设计划时代的新药、发现常温超导材料、开发高效的太阳能电池和电池材料，以及合成高能效的肥料等。&lt;/p>
&lt;h4 id="3-组合优化问题与搜索grover算法">3. 组合优化问题与搜索（Grover算法）
&lt;/h4>&lt;p>对于从庞大选项中找出最佳方案的问题（如物流路线优化、金融投资组合优化等），量子算法同样能发挥作用。使用“Grover算法”，在从无序的数据库中搜索目标数据时，只需经典计算机所需次数的平方根就能完成。例如，如果有1亿条数据，经典计算机最多需要1亿次搜索，而量子计算机只需大约1万次即可完成。&lt;/p>
&lt;hr>
&lt;h2 id="第5章阻碍硬件发展的壁垒退相干与量子纠错">第5章：阻碍硬件发展的壁垒——“退相干”与“量子纠错”
&lt;/h2>&lt;p>虽然在理论上量子计算机拥有如魔法般强大的力量，但在其实用化的道路上，矗立着极高极险峻的物理壁垒。最大的敌人就是 &lt;strong>“噪声”&lt;/strong>。&lt;/p>
&lt;p>量子比特的“叠加态”和“量子纠缠”是极其微妙且脆弱的状态。只需接触到周围微小的热量、电磁波的波动甚至宇宙射线，那种神奇的状态就会瞬间崩溃，变回普通的经典比特。这种现象被称为 &lt;strong>“退相干（量子崩塌）”&lt;/strong>。&lt;/p>
&lt;h3 id="物理实现方式的激烈竞争">物理实现方式的激烈竞争
&lt;/h3>&lt;p>目前，为了解决在物理上如何制造这种微妙的量子比特的问题，世界各地都在研究各种不同的方式，并展开了激烈的霸权争夺。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>超导方式（Superconducting）&lt;/strong>：被Google、IBM、Amazon等采用。使用环状超导电路，通过巨大的制冷机冷却到接近绝对零度（约-273℃）的极低温来控制量子态。这是目前最领先、最容易增加量子比特数量的方式，但冷却设备庞大且昂贵。&lt;/li>
&lt;li>&lt;strong>离子阱方式（Trapped Ion）&lt;/strong>：被IonQ、Quantinuum等采用。将离子（原子）用电磁场困在真空中，并用精密的激光照射进行控制。所有量子比特都是均匀的，能长时间保持状态（相干时间长）是其优势，但存在操作速度比超导慢的问题。&lt;/li>
&lt;li>&lt;strong>光量子方式（Photonic）&lt;/strong>：PsiQuantum等公司正致力于此。使用光粒子（光子）。很大一部分可以在室温下运行，不需要极低温环境，最大的优点是与现有的硅芯片制造技术和光纤通信技术兼容性好。&lt;/li>
&lt;li>&lt;strong>拓扑方式（Topological）&lt;/strong>：Microsoft多年来一直在研究。这是一种野心勃勃的方法，试图利用被称为任意子的特殊粒子的拓扑（拓扑学）性质，制造出从根本上对环境噪声有很强抵抗力（不容易发生错误）的量子比特。理论上最强，但物理实现的门槛被认为是最高的。&lt;/li>
&lt;/ul>
&lt;h3 id="迈向终极目标容错量子计算机ftqc之路">迈向终极目标“容错量子计算机（FTQC）”之路
&lt;/h3>&lt;p>在我们现在使用的经典计算机世界里，其实也存在计算错误（比如宇宙射线导致的比特翻转），但由于“纠错码”能完美地将其修正，我们才能在完全意识不到错误的情况下使用智能手机。为了让量子计算机也能进行实用的大规模计算，同样的 &lt;strong>“量子纠错（Quantum Error Correction: QEC）”&lt;/strong> 是必不可少的。&lt;/p>
&lt;p>然而，由于量子态具有“一观测就会崩溃”的性质，所以存在一个致命的悖论：为了确认错误，我们不能直接查看（观测）里面的内容。
为了绕过这个问题，人们建立了一种理论（如表面码等）：通过巧妙组合大量不稳定的“物理量子比特”，来构建1个能够检测和修正错误的稳定“逻辑量子比特”。
但是，据说为了制造1个逻辑量子比特，需要1000到1万个物理量子比特。如果要使用数千个逻辑量子比特来执行Shor算法等，整个系统就需要拥有数百万到数千万个物理量子比特。&lt;/p>
&lt;p>我们现在所处的时代，被称为 &lt;strong>NISQ（Noisy Intermediate-Scale Quantum：含噪声中型量子）&lt;/strong> 设备时代。这是一种没有纠错功能、只能在几十到几百个量子比特下运行的过渡期机器。
专家预测，要实现完全能够纠错的终极目标—— &lt;strong>“容错量子计算机（Fault-Tolerant Quantum Computer: FTQC）”&lt;/strong>，还需要进行10年到几十年的长期研发。&lt;/p>
&lt;hr>
&lt;h2 id="第6章量子计算机的历史与未来展望">第6章：量子计算机的历史与未来展望
&lt;/h2>&lt;p>最后，让我们俯瞰一下量子计算机是如何诞生的，以及它未来将走向何方。&lt;/p>
&lt;h3 id="从理论诞生到证明量子霸权">从理论诞生到证明“量子霸权”
&lt;/h3>&lt;ul>
&lt;li>&lt;strong>1980年代&lt;/strong>：物理学家保罗·贝尼奥夫和理查德·费曼提出了利用量子力学原理的计算机概念。“如果要模拟自然，就使用量子力学吧”这句话成为了发端。&lt;/li>
&lt;li>&lt;strong>1994年&lt;/strong>：彼得·秀尔发表了用于质因数分解的量子算法（Shor算法）。这震惊了世界，也成为了巨额研究资金流入的契机。&lt;/li>
&lt;li>&lt;strong>1996年&lt;/strong>：洛夫·格罗弗（Lov Grover）发表了加速数据搜索的Grover算法。&lt;/li>
&lt;li>**2019年 **：历史性的里程碑。Google宣布，使用53个量子比特的超导处理器“Sycamore”，在约200秒内完成了经典超级计算机需要花费1万年（据称）才能完成的随机数生成验证计算。作为世界首次宣告证明 &lt;strong>“量子霸权（Quantum Supremacy）”&lt;/strong> 的事件，引起了巨大轰动（后来IBM等改进了经典超级计算机端的算法，反驳称几天就能计算完，引发了热烈讨论）。&lt;/li>
&lt;li>&lt;strong>2023年以后&lt;/strong>：IBM发布了超过1000个量子比特的处理器“Condor”。此外，哈佛大学等成功生成并操作了“逻辑量子比特”，纠错技术的初期实证报告开始陆续出现。&lt;/li>
&lt;/ul>
&lt;h3 id="面向下一代技术">面向下一代技术
&lt;/h3>&lt;p>量子计算机并不仅仅是“时钟频率更快的下一代CPU”。它用支配微观世界的量子力学法则从根本上改写了计算行为本身的观念，这确实是信息科学中的一次范式转变。&lt;/p>
&lt;p>在我们有生之年，大概不会拥有能放进口袋的“个人量子智能手机”（因为那也没有必要）。但是，在AWS或Azure等云网络背后的强大量子数据中心，有朝一日突然发现了不治之症的特效药，或者计算出了能解决全球变暖的梦幻清洁能源材料（例如在常温下从大气中的氮气合成氨的催化剂），这样的未来确实正在逼近。&lt;/p>
&lt;p>目前还相当于1940年代的ENIAC（电子数值积分计算机）那样的黎明期——巨大的真空管发出的热量让整个房间变得酷热，还要靠打孔卡来运行。但是，全世界顶尖的研究人员和工程师正在绞尽脑汁，每天都有技术突破的报告。
能够实时见证这个新“计算黎明”进化过程的我们，可以说生活在一个在历史上非常令人兴奋的时代。&lt;/p>
&lt;p>通向量子世界的大门才刚刚开启。未来的动向值得我们密切关注。&lt;/p>
&lt;hr>
&lt;p>&lt;em>本文的目的是为了向商务人士和对技术感兴趣的普通大众，以通俗易懂的方式解说量子计算的基本概念。请注意，本文在严密的数学和物理学定义（如狄拉克符号（Bra-ket记号）、复数概率振幅的细节等）上进行了一定程度的简化。&lt;/em>&lt;/p></description></item><item><title>使用 Win32API + C++ 编写程序的优缺点</title><link>http://kenji.blog/zh-cn/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/</link><pubDate>Sat, 12 Jul 2025 12:30:35 +0900</pubDate><guid>http://kenji.blog/zh-cn/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/</guid><description>&lt;img src="http://kenji.blog/p/win32api-c-%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%A8%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/img_1.png" alt="Featured image of post 使用 Win32API + C++ 编写程序的优缺点" />&lt;h1 id="使用-win32api--c-开发的魅力与挑战">使用 Win32API + C++ 开发的魅力与挑战
&lt;/h1>&lt;p>对于想要深入 Windows 应用开发的人来说，&lt;strong>Win32API + C++&lt;/strong> 至今依然是一个强大的选择。
这种组合能够以最近的距离与操作系统交互，兼具高速性与灵活性。&lt;/p>
&lt;p>另一方面，由于其与现代的开发风格大相径庭，因此在学习上需要做好心理准备。&lt;/p>
&lt;p>本文将从 &lt;strong>现役 Windows 应用开发者的视角&lt;/strong>，浅显易懂地解说其优点与缺点。&lt;/p>
&lt;hr>
&lt;h2 id="优点">优点
&lt;/h2>&lt;h3 id="超高速的原生执行">超高速的原生执行
&lt;/h3>&lt;p>C++ 和 Win32API 在最靠近操作系统的层级上运行，因此几乎没有多余的开销。
其 CPU 和内存的使用效率极高，拥有 &lt;strong>压倒性的执行速度&lt;/strong>。&lt;/p>
&lt;h3 id="极高的灵活性和自由度">极高的灵活性和自由度
&lt;/h3>&lt;p>无论是窗口控制、异步处理、COM 协作还是进程管理等，应用的任何行为都可以 &lt;strong>自行进行精细控制&lt;/strong>。
你也可以构建专用于特定目的的工具，或自制独有的框架等。&lt;/p>
&lt;h3 id="无需运行时便于分发">无需运行时，便于分发
&lt;/h3>&lt;p>无需像 .NET 或 Java 那样的外部运行时，&lt;strong>只需一个可执行文件即可分发&lt;/strong>。
在再分发时不易出现问题，无需安装程序也能轻松运行，这是其魅力所在。&lt;/p>
&lt;h3 id="能够制作轻量级应用">能够制作轻量级应用
&lt;/h3>&lt;p>由于只需最小限度的配置即可，其特征是 &lt;strong>内存占用非常小&lt;/strong>。
即使在低配置的 PC 或虚拟机环境中也能流畅运行。&lt;/p>
&lt;h3 id="支持操作系统级别的高级控制">支持操作系统级别的高级控制
&lt;/h3>&lt;p>鼠标与键盘的全局钩子、窗口样式的微调、系统菜单操作等，
也能实现 &lt;strong>在普通语言或库中难以完成的控制&lt;/strong>。&lt;/p>
&lt;hr>
&lt;h2 id="缺点">缺点
&lt;/h2>&lt;h3 id="开发效率低">开发效率低
&lt;/h3>&lt;p>GUI 的构建也完全需要通过代码来实现，有时 &lt;strong>仅制作一个按钮就需要几十行代码&lt;/strong>。
更改设计时的修改也很繁琐，与使用 UI 框架的开发相比，生产力较低。&lt;/p>
&lt;h3 id="维护性容易下降">维护性容易下降
&lt;/h3>&lt;p>消息循环和窗口过程等 &lt;strong>结构特殊的代码&lt;/strong> 很多，在可读性和可重用性上存在困难。
也有不适合团队开发或长期维护的一面。&lt;/p>
&lt;h3 id="适配现代-ui-很麻烦">适配现代 UI 很麻烦
&lt;/h3>&lt;p>高 DPI 适配、触摸界面、无障碍功能、深色模式等，&lt;strong>很难应对近年来对 UX（用户体验）的要求&lt;/strong>。
必须逐一手动进行适配，非常费力。&lt;/p>
&lt;h3 id="不支持跨平台">不支持跨平台
&lt;/h3>&lt;p>因为完全是 Windows 专用的 API，&lt;strong>无法移植到 macOS 或 Linux&lt;/strong>。
如果考虑到多平台部署，则需要选择其他技术。&lt;/p>
&lt;h3 id="学习成本极高">学习成本极高
&lt;/h3>&lt;p>必须理解句柄、GDI、COM、OLE 等 &lt;strong>在现代已经不太使用的概念和机制&lt;/strong>。
文档也有很多是旧的，学习需要时间和毅力。&lt;/p>
&lt;hr>
&lt;h2 id="适合的用途">适合的用途
&lt;/h2>&lt;ul>
&lt;li>文件启动器或快捷键辅助等 &lt;strong>轻量级工具&lt;/strong>&lt;/li>
&lt;li>剪贴板操作或 IME 控制等 &lt;strong>系统实用程序&lt;/strong>&lt;/li>
&lt;li>全局钩子或窗口捕获等 &lt;strong>原生控制系应用&lt;/strong>&lt;/li>
&lt;li>与硬件紧密协作的 &lt;strong>驱动辅助工具&lt;/strong>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="不适合的用途">不适合的用途
&lt;/h2>&lt;ul>
&lt;li>重视现代 UI/UX 的 &lt;strong>面向普通消费者的应用&lt;/strong>&lt;/li>
&lt;li>速度优先的 &lt;strong>原型制作或 MVP 开发&lt;/strong>&lt;/li>
&lt;li>以长期运营或团队开发为前提的 &lt;strong>大规模项目&lt;/strong>&lt;/li>
&lt;li>需要支持多个操作系统的 &lt;strong>跨平台产品&lt;/strong>&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="评价总结">评价总结
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>维度&lt;/th>
&lt;th>评价&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>执行速度&lt;/td>
&lt;td>◎ 非常快&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>内存效率&lt;/td>
&lt;td>◎ 优秀&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>开发速度&lt;/td>
&lt;td>× 慢&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>维护性&lt;/td>
&lt;td>× 低&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>跨平台支持&lt;/td>
&lt;td>× 不支持&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>现代 UI 支持&lt;/td>
&lt;td>× 弱&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>OS 控制自由度&lt;/td>
&lt;td>◎ 压倒性地高&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="结论">结论
&lt;/h2>&lt;p>&lt;strong>Win32API + C++ 是适合“想要自己处理操作系统的一切”的开发者的工具。&lt;/strong>
虽然它的力量非常强大，但在学习和运用上也需要相应的心理准备。&lt;/p>
&lt;blockquote>
&lt;p>是否有“特意去选择”的价值，取决于你目标应用的性质。&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;p>不依赖 GUI 框架或现代语言，跃入 &lt;code>#include &amp;lt;windows.h&amp;gt;&lt;/code> 的世界——
这种选择，至今依然是有意义的。&lt;/p></description></item></channel></rss>