-1
class A
{
    int x,y;
    public:
       A(int a=0,int b=0)
       {x=a;y=b;}
    /* ... */
}

A& fctr()
{
    A loc(1,2);
    return loc;
}

让我们检查一下这条指令:

A x=fctr();

fctr()返回对已销毁对象的引用... <<这不是问题-_-

在上面的指令中,根据 fctr 返回的引用,程序将销毁的对象loc复制到 x 中。

另一方面,按值返回将对象loc复制到 x !

我看到的唯一区别是,当通过引用返回时,对象loc被破坏,但是当按值返回时,对象loc在指令完成之前不会被破坏。

所以按值返回似乎是安全的,它和按引用返回一样!

我在书中读到的和从人们那里听到的是,按引用返回比按值返回要快...

那么为什么按引用返回比按值返回快呢?

...我认为我错了,但我不知道是什么?!!!

4

1 回答 1

1

通过引用返回 - 系统不需要分配和初始化任何额外的内存。只需要传递已经存在的位置的内存地址。

按值返回 - 系统需要分配和初始化额外的内存。

这完全取决于您是否需要“按引用”或“按值”的要求。

于 2013-08-12T17:29:32.183 回答