深度解读C++对象模型:返回值优化的原理与实现

接下来,我将继续更新“深度解读《深度探索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;
    }
  
热门手游下载
下载排行榜