关于函数返回值的讨论与总结
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 的时候 | 不调用拷贝构造函数。(这个比较奇怪)我想是编译器优化的结果。 |