#include <iostream>
#include <string>
using namespace std;
class test
{
public:
string a;
public:
test(string b){a=b;}
friend string operator+(test);
};
string operator+(string &c,test a)
{
c=c+a.a;
return c;
}
void main()
{
test d("the ");
test e("world!");
string s="Hello ";
s=s+d+e;
cout<<s<<endl;
}
倒数第二行s=s+d+e; 在第一个重载的operator +之后返回了一个临时对象,第二个重载的operator +意外工作了!但是operator+函数的第一个参数是一个引用。为什么临时对象的引用在这里有效,或者我错过了什么?
PS:VC++6.0编译,运行结果如下。