这样做有意义吗?
class SomeClass
{
public:
static Object getObject()
{
return Object("example")
}
};
int main()
{
const Object& myObject = SomeClass::getObject();
// do something with myObject
}
或者与获得对象一样
const Object myObject = SomeClass::getObject();
?
答案 0 :(得分:6)
根据赫伯·萨特(Herb Sutter)在该主题上的文章here,两种情况都是正确的:
通常,临时对象仅持续到完整对象的结尾 出现在其中的表达式。但是,C ++故意指定 将临时对象绑定到堆栈上const的引用 将临时文件的寿命延长到 引用自身,从而避免了其他常见情况 悬挂参考错误。
但是,如果您从案例1中删除const
,那将是不对的。
答案 1 :(得分:0)
使用NRVO时,两者之间存在细微差别。
命名的返回值优化只能与局部变量一起使用。参考不是:
auto foo() -> Object
{
const Object& myObject = SomeClass::getObject();
return myObject; // no NRVO in this case
}
auto foo() -> Object
{
const Object myObject = SomeClass::getObject();
return myObject; // NRVO applies in this case
}