Folia
← 返回头版

C++26引入标准库硬化特性

C++26标准引入Standard Library Hardening特性,通过在编译时启用检查模式,将原本导致未定义行为的标准库前置条件违反转变为可检测的、具有终止语义的失败。1该特性包括边界检查、容器空状态检查等功能,由P3471、P3697、P3878三个提案定义。1

主流编译器厂商已提供各自的启用机制。1其中,GCC的libstdc++使用_GLIBCXX_ASSERTIONS;Clang的libc++使用_LIBCPP_HARDENING_MODE(包括NONE、FAST、EXTENSIVE、DEBUG四种模式);MSVC STL则使用_MSVC_STL_HARDENING=1。1

Standard Library Hardening的核心设计在于检测编程错误而非使用异常机制(如.at()方法),在违反条件时直接终止执行。1被纳入硬化检查的前置条件需满足三项标准:违反会导致内存安全问题、调用点有必要数据执行检查、以及检查可在常数时间内完成。1截至2026年8月,编译器和库厂商仍在继续完成C++26特性的实现。1


评论