相关疑难解决方法(0)

为什么当d == 0时'd / = d'不抛出零除异常?

我不太明白为什么我不能除以零例外:

int d = 0;
d /= d;
Run Code Online (Sandbox Code Playgroud)

我本来希望得到除以零的除法运算,但是反而d == 1

为什么在什么时候不d /= d将被零除d == 0

c++ division divide-by-zero compiler-optimization undefined-behavior

80
推荐指数
3
解决办法
5485
查看次数

如何在Visual Studio 2008 C++中捕获除零错误?

如何在Visual Studio 2008 C++中捕获除零错误(而不是其他错误;以及能够访问异常信息)?

我试过这个:

try {
  int j=0;
  int i= 1/j;//actually, we call a DLL here, which has divide-by-zero
} catch(std::exception& e){
  printf("%s %s\n", e.what()); 
}  catch(...){
  printf("generic exception");
}
Run Code Online (Sandbox Code Playgroud)

但这是通用的...... catch块.我知道MS特定的__try在某种程度上可能有用,但我更喜欢标准的C++,并且在任何情况下我都有析构函数来阻止使用__try.

澄清:上面的代码被简化用于讨论目的.实际上,除零是一个在第三方DLL深处发生的错误,我没有源代码.错误取决于我传递给库的参数(复杂结构的句柄),但不是以任何明显的方式.所以,我希望能够优雅地恢复.

c++ exception-handling try-catch visual-studio-2008

7
推荐指数
4
解决办法
1万
查看次数

0 除以 0 在 g++ 10.2 中得到 1

gcc says: 0 / 0 equals 1使用g++10.2编译时打印以下代码:

#include <iostream>

int main() {
  int a = 0;
  std::cout << "gcc says: 0 / 0 equals " << (a / a) << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在 Godbolt 上运行它

  • 应该是这样吗?(编译clang并执行它返回 136 - 错误的算术运算)。
  • 这是某种代码优化的结果吗?
  • 有没有办法使这个错误?

编辑:有编译-fsanitize=undefined品牌g++产生一个运行时错误。感谢@chris。

c++ g++

0
推荐指数
1
解决办法
82
查看次数