说我有以下课程:
class A{ };
Run Code Online (Sandbox Code Playgroud)
然后在我的代码中我有一个函数:
A foo(){
A ret;
//Do stuff
return ret;
}
Run Code Online (Sandbox Code Playgroud)
然后我稍后使用该功能....
优化编译器(如g++)是否只是foo()像处理void函数一样处理并跳过实际为空对象分配内存?它可能不会这样做,因为即使空类的大小为1.
这是gcc.godbolt.org的一个用例,您可以在其中查看生成的汇编代码(我建议您单击colourize按钮以查看哪个C++代码对应于哪个汇编代码).您可以看到,即使使用-O0,也没有生成用于分配或复制对象的代码.您可以尝试其他编译器和优化级别.您可以使用#defines轻松比较返回class A和之间的代码void.