如何在 c++ 中生成overflow_error或underflow_error异常
How to generate overflow_error or underflow_error exception in c++?
我想检查在什么情况下会在 c++ 中生成overflow_error和underflow_error异常,所以我写了一个演示来尝试生成overflow_error异常,但失败了:
#include <iostream>
#include <stdexcept>
using std::cout; using std::endl;
int main() {
try {
int a = std::pow(2, 31) - 1;
cout << a << endl;
int b = 1;
int c = a + b;
cout << c << endl;
} catch (std::overflow_error ex) {
cout << ex.what() << endl;
}
return 0;
}
输出是:
2147483647
-2147483648
如您所见,没有生成overflow_error异常,因此,我的问题是算术溢出错误和算术下溢错误是什么以及如何在 c++ 中生成overflow_error和underflow_error异常?
抛出std::overflow_error
的唯一标准库组件是 std::bitset::to_ulong
和 std::bitset::to_ullong
。
标准库组件不会引发std::underflow_error
(数学函数报告math_errhandling中指定的下溢错误(。
在您的示例中,您正在尝试检查有符号整数溢出。您需要为此检查指定标志。
例如:
使用 clang++
编译程序并将其与-fsanitize=undefined
标志链接。
% cat test.cc
int main(int argc, char **argv) {
int k = 0x7fffffff;
k += argc;
return 0;
}
% clang++ -fsanitize=undefined test.cc
% ./a.out
test.cc:3:5:运行时错误:有符号整数溢出:2147483647 + 1 无法用类型"int"表示
相关文章:
- "error: no matching function for call to"构造函数错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 使用 LuaBridge 将 LuaJIT 绑定到C++会导致"PANIC: unprotected error"
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- C++错误:"error: int aaa::bbb is protected within this context"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- C++ "error: invalid use of void expression"
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 从不同目录执行时"symbol lookup error:",否则从构建目录执行时按预期工作
- 对象声明中的模板"error: expected expression"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- OpenCV 3.4.1 error readNetFromTensorflow 无法在 cv::d nn::ReadProtoFromBinaryFile 中打开 .pb
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 为什么我会"error: expected expression"?
- CMake Error at modules/videoio/cmake/detect_ffmpeg.cmake:16
- 如果两个静态库使用相同的另一个静态库,如何避免"LNK2005 Already Defined error"?
- 在 Objective-C++ -> EXC_BAD_ACCESS Error 中使用"new"关键字