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

时间:2015-08-15 22:01:51

标签: c++ c++11 undefined-behavior

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

我知道这些程序被称为“不可移植”并且执行未定义的表达式是错误的。

它可能导致什么以及为什么它会在某些编译器/机器上发生?

1 个答案:

答案 0 :(得分:1)

对于像C ++这样的编译语言来说,检测所有不良条件会非常低效。在编译时,您可能会说它从解决暂停问题到完全不可能。在运行时,检测所有这些条件同样会很慢。因此,标准有这个概念告诉你,程序员,“不要那样做”,而且告诉编译器和运行时实现者,“你不必将程序员从她或他自己的愚蠢中拯救出来。” / p>