<分区>
编译器:Visual C++ 2012 RTM
对我来说,将调用 test() 内联到第二个 std::cout 语句中似乎很奇怪。
标签 c++ visual-c++
<分区>
编译器:Visual C++ 2012 RTM
对我来说,将调用 test() 内联到第二个 std::cout 语句中似乎很奇怪。
最佳答案
是的。编译器可以自由地进行程序无法检测到的更改。由于 test
函数没有外部可见的效果,因此编译器可以随意将其提前或延迟,甚至完全消除它。
如果您能以某种方式解释这种优化使您的代码做了它不应该做的事情,那么您就有了一些东西。但到目前为止,您唯一的声明是它使您的代码运行得更慢或更快。编译器可以自由地进行优化,使代码的某些部分变慢而某些部分变快。事实上,这就是优化的本质——进行我们希望产生净 yield 的性能权衡。这可能会导致生成的代码质量很差,尽管在这种情况下似乎没有,但它肯定是有效的。这就是优化的意义所在。
编译器获取您的源代码并生成输出编译代码。它可以免费构建任何它喜欢的编译代码,只要它能产生您的源代码要求它产生的可观察结果。如果源代码可以找到一种以它认为更好的方式产生相同效果的方法,则不需要以与源代码相同的方式产生输出。这就是优化的全部要点 -- 不是按字面意思去做您要求它做的事情,而是以其他方式产生相同的结果,但愿是更好的方式。
关于c++ - 这是有效的编译器优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12509385/