关于函数返回值的讨论与总结

class A
{
public:
A()
{
cout<<"普通构造函数"<<endl;
}
A(const A& a)
{
cout<<"copy construct"<<endl;
}
~A()
{
cout<<"deconstruct"<<endl;
}
A& operator=(const A &a)
{
cout<<"复制操作符"<<endl;
return *this;
}
};
A fA(A a)
{
//A a;
return a;
}
int main()
{
A a;
A b;
b=fA(a);


system("pause");
return 0;
}

1.  对于函数返回的是引用还是非引用,如果我们采用这种方式  A b=fun(a) ,不产生影响。

2.  如果 以这种方式调用, A b ; b=fun(a)  且 函数已拷贝的形式返回,那么可以分为三种

函数声明形式

A fun(A &a)

{

   return a;

}

A fun(A a)

{

  return a;
}

A fun()

{

    A a;

    return a;
}

函数返回对于拷贝构造函数调用的情况 b=fun(a) 调用一次拷贝构造函数 调用两次拷贝构造函数,一次是传入实参的时候,一次是return 的时候 不调用拷贝构造函数。(这个比较奇怪)我想是编译器优化的结果。

posted on 2013-07-16 10:12  dyc0113  阅读(164)  评论(0编辑  收藏  举报

导航