除以0的MSVC++错误,永远不会发生!固定?

mat*_*att 9 c++ compiler-construction visual-c++

const int bob = 0;

if(bob)
{
    int fred = 6/bob;
}
Run Code Online (Sandbox Code Playgroud)

你将在完成除法的行上得到一个错误:"错误C2124:除以或除以零"

这是蹩脚的,因为'if'检查失败是不可避免的,因为除法将导致div为0.坦率地说,我认为编译器甚至没有理由评估'if'中的任何内容,除了确保支撑完整性.

无论如何,显然这个例子不是我的问题,我的问题来自于做复杂的模板尝试在编译时尽可能多地做,在某些情况下参数可能是0.

反正有没有解决这个错误?或禁用它?或者比这更好的解决方法:

目前我能想到的唯一工作(我之前遇到过与递归枚举访问相同的问题)是使用模板特化来执行'if'.

哦是的,我正在使用Visual Studio Professional 2005 SP1和vista/win7修复程序.

Fer*_*yer 4

bob我想您的编译器会尝试优化自已定义的代码片段const,以便fred可以在编译时确定 的初始值。也许您可以通过将 bob 声明为非 const 或使用volatile关键字来阻止这种优化。