# std::feraiseexcept

< cpp‎ | numeric‎ | fenv

定义于头文件 `<cfenv>` |  |
int feraiseexcept( int excepts ); |  | (C++11 起)

试图引发所有列于 `excepts` （浮点异常宏的逐位或）的浮点异常。若异常之一是 FE_OVERFLOW 或 FE_UNDERFLOW ，则此函数还会再引发 FE_INEXACT 。引发异常所用的顺序是未指定的，除了 FE_OVERFLOW 和 FE_UNDERFLOW 始终先于 FE_INEXACT 引发。

### 参数

excepts | - | 列出要引发的异常标志的位掩码

### 返回值

若已引发所有列出的异常则为 ​0​ ，否则为非零值。

### 示例

    #include <iostream>
    #include <cfenv>

    #pragma STDC FENV_ACCESS ON

    int main()
    {
        std::feclearexcept(FE_ALL_EXCEPT);
        int r = std::feraiseexcept(FE_UNDERFLOW | FE_DIVBYZERO);
        std::cout <<  "Raising divbyzero and underflow simultaneously "
                  << (r?"fails":"succeeds") << " and results in\n";
        int e = std::fetestexcept(FE_ALL_EXCEPT);
        if (e & FE_DIVBYZERO) {
            std::cout << "division by zero\n";
        }
        if (e & FE_INEXACT) {
            std::cout << "inexact\n";
        }
        if (e & FE_INVALID) {
            std::cout << "invalid\n";
        }
        if (e & FE_UNDERFLOW) {
            std::cout << "underflow\n";
        }
        if (e & FE_OVERFLOW) {
            std::cout << "overflow\n";
        }
    }

输出：

    Raising divbyzero and underflow simultaneously succeeds and results in
    division by zero
    underflow

### 参阅

feclearexcept (C++11) | 清除指定的浮点状态标志 (函数)
fetestexcept (C++11) | 确定设置了哪个指定的浮点状态标志 (函数)