#include<iostream>
using namespace std;
class A
{
private:
/* data */
public:
A(/* args */);
A(const A&other);
A& operator=(const A&other);
A getA();
void fun(A);
void fun2(A&);
~A();
};
A::A(/* args */)
{
cout<<"A():"<<this<<endl;
}
A::A(const A&other)
{
cout<<"copy A():"<<endl;
}
A& A::operator=(const A&other)
{
cout<<"operator="<<endl;
}
A::~A()
{
cout<<"~A():"<<this<<endl;
}
A A::getA()
{
A c;
return c;
}
void A::fun(A c)
{
cout<<"&c:"<<&c<<endl;
}
void A::fun2(A& d)
{
cout<<"&d:"<<&d<<endl;
}
A getcopyA()
{
cout<<"getcopyA()"<<endl;
return A();
}
int main()
{
A b = getcopyA();
return 0;
}
上面代码,按照不优化问题应该会产生两次拷贝。但是由于编译器优化问题无法体现出拷贝的过程,如下:
即使使用-O0关闭优化,也是无法体现,如下:
如果要想体现拷贝过程需要使用
-fno-elide-constructors 选项,如下: