std::feraiseexcept
来自cppreference.com
<tbody>
</tbody>
| 在标头 <cfenv> 定义
|
||
int feraiseexcept( int excepts ); |
(C++11 起) | |
尝试引发所有列于 excepts(浮点数异常宏的逐位或)的浮点数异常。若异常之一是 FE_OVERFLOW 或 FE_UNDERFLOW,则此函数还会再引发 FE_INEXACT。引发异常所用的顺序是未指定的,但 FE_OVERFLOW 和 FE_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";
}
输出:
同时引发除以零和下溢出成功,并导致
除以零
下溢出
参阅
(C++11) |
清除指定的浮点数状态标志 (函数) |
(C++11) |
确定设置了哪个指定的浮点数状态标志 (函数) |
feraiseexcept 的 C 文档
| |