#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;
}
最後から 2 番目の行s=s+d+e; 最初のオーバーロードされた演算子 + の後、一時オブジェクトが返され、2 番目のオーバーロードされた演算子 + が予期せず機能しました!しかし、演算子 + 関数の最初のパラメーターは参照です。ここで一時オブジェクトの参照が有効なのはなぜですか、それとも見逃したことがありますか?
PS: VC++6.0 でコンパイルされており、実行結果は次のとおりです。