class ca
{};
ca f()
{
ca x;
return x;
}
int main()
{
ca y= f();
return 0;
}
{};
ca f()
{
ca x;
return x;
}
int main()
{
ca y= f();
return 0;
}
中间过程是有临时对象产生的
这个过程相当于:
ca类型的临时变量 = f();
ca y = ca类型的临时变量;
#include <iostream>
#include <string>
using namespace std;
class ca
{
public:
ca()
{
cout<<"ca()"<<endl;
}
ca(ca& ca)
{
cout<<"ca(ca& ca)"<<endl;
}
~ca()
{
cout<<"~ca()"<<endl;
}
};
ca f()
{
ca x;
return x;
}
int main()
{
ca y;
y=f();
system("pause");
return 0;
}
#include <string>
using namespace std;
class ca
{
public:
ca()
{
cout<<"ca()"<<endl;
}
ca(ca& ca)
{
cout<<"ca(ca& ca)"<<endl;
}
~ca()
{
cout<<"~ca()"<<endl;
}
};
ca f()
{
ca x;
return x;
}
int main()
{
ca y;
y=f();
system("pause");
return 0;
}
输出结果:
ca()
ca(ca& ca)
~ca()
请按任意键继续 . . .
~ca()
若将上述主函数中的代码
ca y=f();
改为:
ca y;
y=f();
y=f();
输出结果为:
ca()
ca()
ca(ca& ca)
~ca()
~ca()
请按任意键继续 . . .
~ca()
ca()
ca(ca& ca)
~ca()
~ca()
请按任意键继续 . . .
~ca()
结论:
ca类型的临时变量 = f(); //这儿构造临时变量要调用ca(ca& ca).
ca y = ca类型的临时变量; //这儿构造y 也调用ca(ca& ca).
ca y = x; 和 ca y(x); 是一样的.都是ca(ca& ca).
ca y; //这儿是ca()
y = x; // 这儿是operator=
和 ca y = x ; 不一样的.