这是一个有效的编译器优化吗?

NFR*_*RCR 0 c++ visual-c++

编译器:Visual C++ 2012 RTM

是不是有错误?:https://connect.microsoft.com/VisualStudio/feedback/details/763601/visual-c-2012-rtm-serious-compiler-bug

对我来说,似乎很奇怪它会将test()内联到第二个std :: cout语句中.

Dav*_*rtz 8

是.编译器可以自由地进行程序无法检测的更改.由于该test函数没有外部可见效果,因此编译器可以根据需要提前或延迟使用,甚至可以完全消除它.

如果您可以通过某种方式解释这种优化使您的代码做了一些它不应该做的事情,那么您就有了一些东西.但到目前为止,您唯一的主张是它使您的代码运行得更慢或更快.编译器可以自由地进行优化,使代码的某些部分变慢,某些部分更快.事实上,这是优化的本质 - 我们希望能够产生净收益的性能权衡.这可能会导致生成质量差的代码,尽管在这种情况下它似乎没有,但它肯定是有效的.这就是优化的全部意义所在.

编译器获取源代码并生成输出编译代码.可以自由构建它喜欢的任何编译代码,只要它产生源代码要求它生成的可观察结果即可.如果它能够找到一种以其认为更好的方式产生相同效果的方法,则不需要以与源代码相同的方式生成输出.这是优化的全部要点 - 不是按字面意思做你要求它做的,而是要产生相同的结果,其他的,希望更好的方式.