对象作为返回值,没有构造函数调用?

时间:2014-08-27 23:32:35

标签: c++

在下面的代码中,从func()返回a1时,我希望创建一个未命名的对象,但似乎并非如此。

#include <iostream>
using namespace std;
class A
{
public:
    A(){ cout << "A ctor" <<endl;}
    A(const A & a){cout << "A copy ctor" <<endl;}
    A & operator = (const A & a){cout << "A assignment" <<endl; return *this;}
    ~A(){cout << "A dtor" <<endl;}
};

A func()
{
    A a1;
    return a1;
}

int main()
{
    A a2 = func();
    return 0;
}

上述代码的输出是:

A ctor
A dtor

P.S。在根据T.C.建议启用-fno-elide-constructors之后,调用2个拷贝构造函数。

A ctor
A copy ctor
A dtor
A copy ctor
A dtor
A dtor

0 个答案:

没有答案