Lobsters | 原文链接 | 2026-09-18 收录

C++26 让平凡死循环不再属于未定义行为

来源: sandordargo.com — 2026-09-16

概述

在 C++26 之前,像 while (true); 这种没有副作用的死循环属于未定义行为,编译器有权假定它会终止,Clang 就会把循环优化掉,导致执行落到链接器安排在后面的函数上。C 语言早在 C11 就为控制表达式是常量的循环开了例外,C++ 一直没有跟进。P2809R3 在 C++26 里以「平凡死循环」这个更窄的定义修掉了它:循环体必须为空,控制表达式必须是求值为真的常量表达式,此时循环体会被替换成一次 std::this_thread::yield()。

核心要点

金句

这不是编译器 bug,它只是未定义行为——好在还没召出鼻子里钻出来的恶魔。
返回 Lobsters 首页