Hacker News | 📄 原文链接 | 2026-09-19 收录

C++26 起,无副作用的死循环不再是未定义行为

来源:sandordargo.com · 42 分 · by ibobev

📋 概述

文章用一个经典例子讲清改动:在 C++26 之前,while (true); 这类没有副作用也没有前向进展保证的循环属于未定义行为,编译器可以假设它会终止,Clang 甚至直接把循环删掉,于是 main 继续往下走,链接器放在后面的 unreachable() 函数被顺带执行,屏幕上莫名打印出 Hello world!。这不是编译器 bug,而是 UB 的后果。C++26 通过提案 P2809R3 规定这类显然的无限循环不再是未定义行为,同一提案还被接受为缺陷报告,因此实现方可以把修复回溯到更早的 C++ 模式,这也解释了为什么在新编译器上即便用 C++20 模式也可能复现不出旧行为。文章顺带回顾了自 C++11 引入前向进展保证以来的来龙去脉。

🔑 核心要点

💡 金句

这不是编译器 bug——它只是未定义行为而已,总比放出恶魔要好。
← 返回 Hacker News 首页