为什么在此代码中没有零编译时警告或运行时崩溃?

时间:2014-12-12 08:36:24

标签: c++

class Divide
{
public:
    float divident, divisor;
    Divide():divident(10.0f),divisor(0.0f){}
};

int main()
{
    Divide obj[100];
    int quotient = obj[1].divident/obj[1].divisor;
    return quotient;
}

编辑:编译器Qt 5.3.1,Windows 7-32位。

为什么在编译时没有除零警告或发生运行时崩溃?

2 个答案:

答案 0 :(得分:6)

它不会崩溃,因为你的浮点除法为零,而不是整数除零。浮点除以零是获得无穷大的有效方法。

floatint的转换未定义,因为无穷大不在int的范围内,因此会允许崩溃,但这不是典型的实现所做的它确实。

答案 1 :(得分:0)

在这种特殊情况下,您可能希望编译器能够进行相当多的代码分析。我无法想到现有的编译器可以为您提供该级别的分析。我没有比这更好的答案。