1
  1. 给定一个程序,它的功能使用异常:如果我们一次运行该程序进行优化,然后再运行它而不进行优化 - 两次执行的输出是否相同?

  2. 给定同一个程序,它的功能不使用异常——如果我们一次运行优化的程序,然后不优化运行它——两次执行的输出是否相同?

这两个问题都来自几天前的一次采访......

我认为第一个问题的答案是否定的——因为当一些代码行抛出异常时,范围是动态的,优化可能会改变程序的执行顺序。因此,两个不同执行的输出(一个有优化和没有优化)可能不同......

这个对吗 ?

2nd问题呢?

非常感激 :)

4

1 回答 1

2

优化不应该改变可观察的行为。一般来说,这两个问题的答案都是肯定的。你没有提到语言。对于 C++,在很多情况下行为是未定义的,如果是这种情况,您可能会看到差异。

你写:

优化可能会改变程序的执行顺序。

虽然这是真的,但在某种程度上,C++ 具有限制重新排序的检查点的概念。

于 2013-02-16T15:51:12.630 回答