C++20及以后标准中浮点操作是否保证不抛出常规异常?
C++20及更高版本中浮点数操作的noexcept保证
针对你提出的三个double类型操作的noexcept判断,在定义行为的前提下,C++20及更高版本标准给出如下明确保证:
noexcept(a = b):结果为true。内置浮点数的赋值操作属于标准规定的非抛出操作,不会触发常规C++异常。noexcept(a == b):结果为true。所有内置浮点数比较运算符(==、!=、<、>等)均被标准保证不会抛出常规C++异常。noexcept(a + b):结果为true。包括加法在内的所有内置浮点数算术运算(如-、*、/等),在定义行为的场景下,绝不会抛出常规C++异常。
需要特别说明:这里仅针对常规C++异常,硬件层面的浮点异常(如除零触发的信号)不属于C++标准异常范畴,不在本次讨论的判断范围内。
内容的提问来源于stack exchange,提问作者Kristian Spangsege
相关产品推荐
相关产品推荐

