C++性能,优化编译器,.cpp中的空函数

Dod*_*odo 5 c++ compiler-optimization

我有一个非常基础的类,将其命名为Basic,几乎用于更大项目中的所有其他文件.在某些情况下,需要调试输出,但在发布模式下,不应该启用它并且是NOOP.

目前,标题中有一个定义,可根据设置打开或关闭makro.关闭时,这肯定是一个NOOP.我想知道,如果我有以下代码,如果编译器(MSVS/gcc)能够优化函数调用,那么它又是一个NOOP.(通过这样做,交换机可以在.cpp中,并且切换将更快,编译/链接时间明智).

--Header--
void printDebug(const Basic* p);

class Basic {
   Basic() {
      simpleSetupCode;

      // this should be a NOOP in release, 
      // but constructor could be inlined
      printDebug(this);
   }
};
--Source--
// PRINT_DEBUG defined somewhere else or here
#if PRINT_DEBUG
void printDebug(const Basic* p) {
   // Lengthy debug print
}
#else
void printDebug(const Basic* p) {}
#endif
Run Code Online (Sandbox Code Playgroud)

小智 1

与所有此类问题一样,答案是 - 如果这对您来说真的很重要,请尝试该方法并检查发出的汇编语言。

  • 魔鬼代言人:这不是涵盖了该网站上大部分问题吗?人们为什么来这里?因为他们不知道。因为他们要么不知道如何找出答案(在这种情况下,也许他们不会说汇编),要么他们太懒或太匆忙这样做。元问题:我们是否想阻止懒惰/匆忙的人,只回答那些真正不知道的人?有些人可能会对常见问题解答感到恼火(可以跳过它们);有些人可能会因为基本相同的问题而一次又一次地喝啤酒。不过,OP至少应该搜索过这个网站(或谷歌) (12认同)
  • (-1) 那么你的答案对用户来说并不是真正“有用”。事实上你还没有回答他们的问题,无论这个问题是否合适。事实上,您并没有投票关闭重复项。如果我问“2 + 2 是什么”,而你说“自己算一下”,那么你就没有“帮助”,也没有“正确”。确实,我应该自己弄清楚,但你**没有**回答我。您的回复应该是评论。 (8认同)