我有以下示例:
struct A
{
...
};
一个按值返回A的函数
A getFoo()
{
A a;
...
return a;
}
呼叫者只需要读取该输出数据即可。
const A& a = getFoo();
这是一个坏方法吗?应该是吗?
const A a = getFoo();
我唯一关心的是范围。我不在乎修改,我只需要阅读。我只在乎避免创建不必要的副本,而不要以悬挂的引用结尾。
答案 0 :(得分:2)
至少在您显示的代码片段中,这不是一个坏方法。从某种意义上说,这是很好的选择,您避免了返回值的副本,从而提高了代码的性能。
但是,现在限制您不要修改该值。如果您对此不满意,则第二种方法更好。实际上,一个选择另一个取决于一个特定的方案。一般来说很难说。
请注意,您不能使用非常量引用来执行此操作,因为不允许将临时对象绑定到非常量引用。
也不必担心该函数返回的值的范围。现在已经有了您的参考变量的范围。
答案 1 :(得分:1)
const A& a = getFoo();
这是一个坏方法吗?应该是吗?
const A a = getFoo();
Former引入了不必要的间接,并且据我所知没有任何好处。后者更易于理解(无需了解受引用约束的临时对象的生命周期延长),从而使其变得更好。