You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

std::fetestexcept返回值能否同时设置多个标志位?

std::fetestexcept 返回值说明

std::fetestexcept 的返回值可以包含多个被设置的标志位,并非只能返回单个标志位。

它的核心逻辑如下:

  • 传入参数是一个标志位掩码,用于指定要检测的浮点异常类型范围
  • 函数返回一个整数,所有在掩码范围内且已被触发的异常标志,对应的位都会被置为1
  • 比如同时触发FE_DIVBYZERO和FE_OVERFLOW时,传入FE_ALL_EXCEPT作为掩码,返回值会是FE_DIVBYZERO | FE_OVERFLOW的位组合结果

示例代码:

#include <cfenv>
#include <cmath>
#include <iostream>

int main() {
    std::feclearexcept(FE_ALL_EXCEPT); // 清除所有异常标志
    std::sqrt(-1.0); // 触发FE_INVALID异常
    std::pow(1e308, 2); // 触发FE_OVERFLOW异常
    
    int flags = std::fetestexcept(FE_INVALID | FE_OVERFLOW);
    if (flags & FE_INVALID) {
        std::cout << "FE_INVALID 标志位已设置\n";
    }
    if (flags & FE_OVERFLOW) {
        std::cout << "FE_OVERFLOW 标志位已设置\n";
    }
    // 此时flags的值为 FE_INVALID | FE_OVERFLOW
    return 0;
}

如果仅传入单个标志位作为掩码,返回值只会反映该标志位的状态,但这是参数限制导致的,函数本身完全支持检测并返回多个标志位的组合状态。

内容的提问来源于stack exchange,提问作者Dess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 02:04:51