为什么有些程序以未定义的行为执行而其他程序却没有?

Why some programs execute with undefined behavior and others don't?

我正在阅读有关类型转换的内容,我听说有些编译器无法检测到未定义的行为,例如将超出范围的值分配给有符号类型的对象,结果将是不确定的。

我知道这样的程序据说是"nonportable",执行未定义的表达式是错误的。

它会导致什么以及为什么它会发生在某些 compilers/machines 身上?

对于像 C++ 这样的编译语言来说,检测所有不良情况的效率会非常低。在编译时,您可能会说它的范围从解决停机问题到根本不可能。在运行时,检测所有这些条件同样会很慢。所以标准有这个概念告诉你,程序员,“不要那样做”,同时也告诉编译器和运行时实现者,“你不必把那个程序员从她或他自己的愚蠢中拯救出来。”