可能重复:
Is it a bug that Microsoft VS C++ compiler can Initialize a reference from a temporary object
#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; 在第一个重载的运算符之后+它返回了一个临时对象,而第二个重载的运算符+意外地工作了!但是运算符+函数的第一个参数是一个参考。为什么临时对象的引用在这里有效,或者有什么我错过了?
P.S:它是由VC ++ 6.0编译的,这是运行结果。
答案 0 :(得分:1)
临时对象持续到创建它们的完整表达式结束 - 粗略地说,直到行尾的;
。在此之前,对它们的引用是有效的。
但是,将它绑定到非const
引用是无效的。编译的唯一原因是因为您的编译器已超过15年,并且该语言从那时起经历了两次重大更改。我建议你升级到这个千年编译器之一。