c++ - 这是有效的编译器优化吗?

标签 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 语句中似乎很奇怪。

最佳答案

是的。编译器可以自由地进行程序无法检测到的更改。由于 test 函数没有外部可见的效果,因此编译器可以随意将其提前或延迟,甚至完全消除它。

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

编译器获取您的源代码并生成输出编译代码。它可以免费构建任何它喜欢的编译代码,只要它能产生您的源代码要求它产生的可观察结果。如果源代码可以找到一种以它认为更好的方式产生相同效果的方法,则不需要以与源代码相同的方式产生输出。这就是优化的全部要点 -- 不是按字面意思去做您要求它做的事情,而是以其他方式产生相同的结果,但愿是更好的方式。

关于c++ - 这是有效的编译器优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12509385/

相关文章:

C++ 预处理器和重载问题

c++ - 在 C++ 中存储双维 vector 的最佳方法是什么?

c++ - 关于在 C++ 中返回 const 引用

C++ 从指针构造

c++ - 一个 SSE Stdlib 式的库?

c++ - STL中的调试错误

c++ - 在指针 vector 中搜索字符串

c++ - 使用 DialogBox 作为主窗口是否正确/合适?

c++ - SQLITE_CANTOPEN - Windows C++

c++ - 将 Visual C++ 委托(delegate)传递给 native C++ 类