代码之家  ›  专栏  ›  技术社区  ›  DarthRubik

空类会被优化掉吗

  •  6
  • DarthRubik  · 技术社区  · 10 年前

    假设我有以下课程:

    class A{ };
    

    然后在我的代码中有一个函数:

    A foo(){
      A ret;
      //Do stuff
      return ret;
    }
    

    然后我稍后使用该函数。。。。

    优化编译器(如 g++ )只是款待 foo() 像一个 void 函数并跳过为空对象实际分配内存?它可能不会这样做,因为即使是空类的大小也为1。

    1 回复  |  直到 10 年前
        1
  •  6
  •   nwp    10 年前

    这是的一个用例 gcc.godbolt.org 在这里您可以看到生成了什么汇编代码(我建议您单击colourize按钮,查看哪个C++代码对应于哪个汇编代码)。您可以看到,即使使用-O0,也没有生成用于分配或复制对象的代码。您可以尝试使用其他编译器和优化级别。你可以使用 #define s以轻松比较返回的代码 class A void .