为什么有些程序以未定义的行为执行,而另一些则没有?

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

本文关键字:程序 未定义 为什么 执行      更新时间:2023-10-16

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

我知道这样的程序被称为"不可移植的",执行一个未定义的表达式是错误的。

它会导致什么,为什么在一些编译器/机器上发生?

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