Lobsters | 📄 原文链接 | 2026-10-05 收录

真(true)的按位取反仍是真,除非它不是

来源:dryperspective.github.io — 2026-10-01

📋 概述

Matthew Taylor 借 C++ 位掩码枚举提案 P4313R1 切入 C++ 整数运算的暗面。由于整型提升不可避免,对 bool 取按位反 ~true 会先提升为 int(1)、取反得 -2、再转回 bool,因非零而仍为 true;标准要求如此,而 gcc 存在长期不符合标准的缺陷,对底层为 bool 的枚举会错误地按最低位截断,甚至给出既不等于 true 也不等于 false 的 bool。作者还指出无固定底层类型的枚举存在未定义行为陷阱,并提出用 concept 约束来规避。

🔑 核心要点

💡 金句

结论或许就是:连 P4313 这样看似合理的纯库提案,也要提防某个古怪的 C++ 边角案例埋下的暗雷。
← 返回 Lobsters 首页