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

时间:2020-01-31 14:04:25

标签: c++

我有以下示例:

struct A
{
...
};

一个按值返回A的函数

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

呼叫者只需要读取该输出数据即可。

const A& a = getFoo();

这是一个坏方法吗?应该是吗?

const A a = getFoo();

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

2 个答案:

答案 0 :(得分:2)

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

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

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

也不必担心该函数返回的值的范围。现在已经有了您的参考变量的范围。

答案 1 :(得分:1)

const A& a = getFoo();

这是一个坏方法吗?应该是吗?

const A a = getFoo();

Former引入了不必要的间接,并且据我所知没有任何好处。后者更易于理解(无需了解受引用约束的临时对象的生命周期延长),从而使其变得更好。