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

  2. 给定相同的程序,它不使用异常的功能 - 如果我们一次运行优化程序,然后我们运行它没有优化 - 将两者的输出执行是一样的吗?

两个问题是从发生前几天接受采访时拍摄...

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

这是正确的吗?

2nd问题怎么样?

非常感谢:)

+1

我不得不回答他们的问题,因为他们愚蠢地认为我知道或不知道他们回答他们想要的答案。而实际上,我有问题的极端无意义挣扎,除非它是一个用于任务写入编译器? – 2013-02-16 15:57:19

+0

@TonyHopkinson:学生在编程中的位置......你可以假设它也涉及编写编译器。 – ron 2013-02-16 16:02:39

+0

不是假设的忠实粉丝。 :( – 2013-02-16 19:51:38

回答

2

优化不应该改变可观察到的行为。总的来说,这两个问题的答案是肯定的。你不提到语言。对于C++,也有很多的情况下行为是不确定的,如果这是你可能会看到不同的情况。

你写:

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

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

+0

@Adrian McCarthy,感谢您的编辑。 – jimhark 2013-02-16 16:57:38