1,如果仅返回类型,则返回的是这个值临时生成的副本;
2,如果返回类型的引用,返回的是这个值得另一个名字(都指向同一个数据)。
#include "stdafx.h"
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
ofstream out("test.out");
class A
{
public:
string id;
A(string iid=""):id(iid){out<<"A(),iid="<<iid<<endl;}
A(const A& a) {id=a.id+"copy";out<<"A(const A& a),iid="<<id<<endl;}
A& operator=(const A& rv)
{
id=rv.id;
return *this;
}
A f1(){return *this;}
A& f2(){return *this;}
A& f3(){A* pb=new A; return *pb;}
};
A& f()
{
A a("a");
cout<<"in f():"<<&a<<endl;
return a;
}
int main()
{
A a("a");
cout<<"&a:"<<&a<<endl;
cout<<"f1():"<<&(a.f1())<<endl;
cout<<"2f1():"<<&(a.f1())<<endl;
cout<<"f2():"<<&(a.f2())<<endl;
A b=a.f1();
cout<<"&b:"<<&b<<endl;
cout<<"f3():"<<&(a.f3())<<endl;
cout<<"in main f():"<<&(f())<<endl;
return 0;
}
运行结果如下:
f2()为函数类型引用返回,则与&a的地址一致;而第一次f1()和 第二次2f1() 都是类型传递,虽然值相同,但是传的是副本,地址不同;