我有以下示例:
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();
前者引入了不必要的间接性,据我所知没有任何好处。后者更容易理解(无需了解受引用约束的临时的寿命延长(,这使得它更好。