char*[]
可以通过const引用将object传递给版本2()和版本3(),这意味着s2是一个临时对象,等于“ ###”或“ @@@”。
但是为什么临时对象 s2可以返回,而临时对象temp无法返回。
int main()
{
result = version2(input, "###");
cout << "Your string enhanced: " << result << endl;
result = version3(input, "@@@");
cout << "Your string enhanced: " << result << endl;
return 0;
}
// No Error
const string & version2(string & s1, const string & s2)
{
return s2;
}
// Error
const string & version3(string & s1, const string & s2)
{
string temp = s2 + s1 + s2;
return temp;
}
关键是物体的寿命。
如前所述,对于第一种情况,std::string
将创建一个临时并将其传递给version2
(绑定到参数s2
)。临时表达式将在完整表达式(即整个表达式)之后销毁result = version2(input, "###");
。这意味着所返回的引用version2
仍然有效,可以将其用于分配给result
。
所有临时对象都将被销毁,这是评估(按词法)包含创建它们的点的完整表达式的最后一步,
对于第二种情况,将temp
在内部创建一个本地对象version3
,当它离开时将被销毁version3
。这意味着version3
将始终返回悬挂的引用。并使用它分配给result
潜在客户。编译器可能会对此做出诊断;但不必。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句