哪种方式首选存储返回的对象以供在函数中使用?

时间:2014-08-25 10:28:25

标签: c++ c++03 return-value-optimization

我使用返回对象的函数,例如以下示例中的Bar()

class Foo
{
public:
    Foo(int _x, int _y) : x(_x), y(_y) {}
private:
    int x, y;
}

Foo Bar()
{
    return Foo(1, 2);
}

不涉及需要额外工具或代码行的人(比如返回指针或使用std::auto_ptr),我知道有两种方法可以在我想要读取它时将返回的对象存储在局部变量中(调用仅const种方法:

const Foo  foo1 = Bar();
const Foo &foo2 = Bar();

它们在C ++中都是正确的,第一个选项应该有no copy overhead

这两个选项在性能方面是否有任何差异?是否应该首选其中一个?

<小时/> 的修改

好的,我会添加一个我关心这个的原因。假设 Bar 的实现发生了变化:

Foo globalFoo(1, 2);  // This object could also be a class member.
Foo &Bar()
{
    return globalFoo;
}

我定义foo1foo2的原始代码仍应有效,但foo2绑定到globalFoo,因此需要更少的内存 1 ,对吗?因此,更好地使用参考文献,因为它可以从界面的这种变化中获益吗?

1 假设通常情况下对象占用的内存多于指针。

0 个答案:

没有答案