1

为什么在 main 函数的最后几行中没有为函数 func 的返回调用调用复制构造函数..当我按值发送参数时调用它,但在我返回值时没有调用

class A
    {
        public:
        int x , y , z;
        A(int x=4 , int y=2 , int z=1)
        {
            this->x = x;
            this->y = y;
            this->z = z;
        }

        A(A& a)
        {
            x = a.x;
            y = a.y;
            z = a.z;
            printf("Copy Constructor called\n");
            a.x++;
        }

        //not a copy constructor
        A(A *a)
        {
            x = a->x;
            y = a->y;
            z = a->z;
            printf("Some Constructor called\n");
            (a->x)++;
        }
        void tell() { printf("x=%d y=%d z=%d\n" , x , y , z);}
    };

    A func()
    {
    A a;

    return a;
    }

    int main()
    {
        A a1;

        a1=func(); //why is copy constructor not called while returning
        a1.tell();
        return 0;
    }
4

1 回答 1

2

这是因为复制省略。允许编译器省略复制并将结果直接存储在对象中。您可以使用编译器选项关闭复制-fno-elide-constructors省略(不过我不推荐它)。

相关:什么是复制省略和返回值优化?

于 2013-10-19T15:41:21.387 回答