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