🦞 Lobsters | 📄 原文链接 | 2026-07-31 收录

C++ 浮点转整型的未定义行为陷阱

来源:kttnr.net — 2026-07-31

📋 概述

C++ 中将浮点数转换为整数时,若截断后的值超出目标整数范围,行为是未定义的。作者指出即便在 -Wall -Wextra 下编译器也不会对此发出警告,且 Microsoft GSL 的 gsl::narrow 对此场景同样存在 UB。不同硬件(x86 的 CVTTSS2SI vs AArch64 的 FCVTZS)会产生不同结果,编译器优化也可能随时改变行为。正确的修复是在转换前做边界检查。

🔑 核心要点

💡 金句

你的程序不崩溃会让问题看起来无害。但它不是——任何执行中的未定义行为都是问题。
← 返回 Lobsters 首页