C++ 为什么在这段代码中没有被零除的编译时警告或运行时崩溃?

C++ 为什么在这段代码中没有被零除的编译时警告或运行时崩溃?,c++,C++,编辑:编译器Qt5.3.1,Windows 7-32位 为什么在编译时没有零除警告或运行时崩溃发生?在这种特殊情况下,编译器可能需要进行相当多的代码分析。我想不出一个现有的编译器能给你提供那种级别的分析。除此之外,我没有更多的答案。在这种特殊情况下,编译器可能会对代码进行分析。我想不出一个现有的编译器能给你提供那种级别的分析。我没有比这个更多的答案。它不会崩溃,因为你有一个浮点除以零,而不是整数除以零。浮点除零是获得无穷大的有效方法 从float到int的转换是未定义的,因为无穷大不在int的范

编辑:编译器Qt5.3.1,Windows 7-32位


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

在这种特殊情况下,编译器可能需要进行相当多的代码分析。我想不出一个现有的编译器能给你提供那种级别的分析。除此之外,我没有更多的答案。

在这种特殊情况下,编译器可能会对代码进行分析。我想不出一个现有的编译器能给你提供那种级别的分析。我没有比这个更多的答案。

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


float
int
的转换是未定义的,因为无穷大不在
int
的范围内,所以在那里可以崩溃,但这并不是典型的实现所要做的。

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


float
int
的转换是未定义的,因为无穷大不在
int
的范围内,所以这里允许崩溃,但这根本不是典型的实现所能做到的。

你为什么期望呢?我是一名测试人员,我编写测试用例是为了使程序崩溃。编译器无法检测到它,但为什么你认为它会崩溃?FWIW,我使用的编译器在除数中有一个文本零时不会产生编译时错误。为什么你会期望两者都出现?我是一名测试人员,我编写测试用例是为了使程序崩溃。编译器无法检测到它,但为什么你认为这会导致崩溃?FWIW,我使用的编译器在除数中有一个文本零时不会产生编译时错误。
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;
}