C++方法中的引用变量

C++ reference variable from method

本文关键字:引用 变量 方法 C++      更新时间:2023-10-16

这样做有意义吗:

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();

从 Herb Sutter 关于这个主题的文章(可以在这里找到(来看,这两种情况都是正确的:

通常,临时对象仅持续到完整结束 它出现的表达式。但是,C++故意指定 将临时对象绑定到堆栈上对 const 的引用 将临时的生存期延长到 引用本身,从而避免了本来是常见的 悬空引用错误。

但是,如果从案例 1 中删除const,则不行。

使用 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
}

现场示例