将空类优化掉

时间:2016-05-02 20:43:06

标签: c++ optimization

说我有以下课程:

class A{ };

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

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

然后我稍后使用该功能....

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

1 个答案:

答案 0 :(得分:6)

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