深度解读C++对象模型:返回值优化的原理与实现
2024-04-19 11:48:16 作者:佚名 接下来,我将继续更新“深度解读《深度探索C++对象模型》”系列文章。欢迎关注公众号:iShare爱分享,自动获得推文和全部的文章列表。
当在函数的内部中返回一个局部的类对象时,是如何返回对象的值的呢?让我们看下面的代码片段:
class Object {}
Object foo() {
Object b;
// ...
return b;
}
Object a = foo();
对于上面的代码,是否一定会从foo函数中拷贝对象到对象a中?如果Object类中定义了拷贝构造函数的话,拷贝构造函数是否一定会被调用?答案是要看Object类的定义和编译器的实现策略有关。我们细化一下代码来进一步分析具体的表现行为,请看下面的代码:
#include <cstdio>
class Object {
public:
Object() {
printf("Default constructor\n");
a = b = c = d = 0;
}
int a;
int b;
int c;
int d;
};
Object foo() {
Object p;
p.a = 1;
p.b = 2;
p.c = 3;
p.d = 4;
return p;
}
int main() {
Object obj = foo();
printf("%d, %d, %d, %d\n", obj.a, obj.b, obj.c, obj.d);
return 0;
}