std::feraiseexcept

来自cppreference.com
< cpp‎ | numeric‎ | fenv
 
 
 
浮点环境
函数
feraiseexcept
(C++11)
(C++11)(C++11)
(C++11)(C++11)
宏常量
(C++11)
 
在标头 <cfenv> 定义
int feraiseexcept( int excepts );
(C++11 起)

尝试引发所有列于 excepts浮点异常宏的逐位或)的浮点异常。若异常之一是 FE_OVERFLOWFE_UNDERFLOW,则此函数还会再引发 FE_INEXACT。引发异常所用的顺序是未指定的,但 FE_OVERFLOWFE_UNDERFLOW 始终先于 FE_INEXACT 引发。

参数

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

返回值

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

示例

#include <cfenv>
#include <iostream>
 
// #pragma STDC FENV_ACCESS ON
 
int main()
{
    std::feclearexcept(FE_ALL_EXCEPT);
    const int r = std::feraiseexcept(FE_UNDERFLOW | FE_DIVBYZERO);
    std::cout << "同时引发除以零和下溢出"
              << (r ? "失败" : "成功") << ",并导致\n";
 
    const int e = std::fetestexcept(FE_ALL_EXCEPT);
    if (e & FE_DIVBYZERO)
        std::cout << "除以零\n";
    if (e & FE_INEXACT)
        std::cout << "不精确值\n";
    if (e & FE_INVALID)
        std::cout << "无效值\n";
    if (e & FE_UNDERFLOW)
        std::cout << "下溢出\n";
    if (e & FE_OVERFLOW)
        std::cout << "上溢出\n";
}

输出:

同时引发除以零和下溢出成功,并导致
除以零
下溢出

参阅

清除指定的浮点状态标志
(函数)
确定设置了哪个指定的浮点状态标志
(函数)