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位。
为什么在编译时没有除零警告或发生运行时崩溃?
答案 0 :(得分:6)
它不会崩溃,因为你的浮点除法为零,而不是整数除零。浮点除以零是获得无穷大的有效方法。
从float
到int
的转换未定义,因为无穷大不在int
的范围内,因此会允许崩溃,但这不是典型的实现所做的它确实。
答案 1 :(得分:0)
在这种特殊情况下,您可能希望编译器能够进行相当多的代码分析。我无法想到现有的编译器可以为您提供该级别的分析。我没有比这更好的答案。