C++ 获取函数在常量引用中按值返回的结果



我有以下示例:

struct A
{
...
};

按值返回 A 的函数

A getFoo()
{
A a;
...
return a;
}

调用方只需要读取该输出数据。

const A& a = getFoo();

这是一个糟糕的方法吗?应该是吗?

const A a = getFoo();

我唯一关心的是范围。我不在乎修改,我只需要阅读。我只关心避免创建不必要的副本,而不是以悬而未决的引用结束。

至少在您展示的代码片段中,这不是一个坏方法。相反,从某种意义上说,它很好,因为您避免了返回值的副本,从而提高了代码的性能。

但是,现在限制您不能修改该值。如果您对此不满意,那么第二种方法更好。事实上,选择一个而不是另一个取决于特定方案。一般来说很难说。

请注意,不能使用非常量引用执行此操作,因为不允许将临时引用绑定到非常量引用。

并且不要担心函数返回的值的范围。它现在已经获得了引用变量的范围。

const A& a = getFoo();

这是一个糟糕的方法吗?应该是吗?

const A a = getFoo();

前者引入了不必要的间接性,据我所知没有任何好处。后者更容易理解(无需了解受引用约束的临时的寿命延长(,这使得它更好。

最新更新