愚蠢的回归对象问题 [英] Silly returning-an-object question

查看:76
本文介绍了愚蠢的回归对象问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述




struct Foo {};


Foo oogie_boogie()

{

Foo a;

返回a;

}

oogie_boogie()返回对Foo对象的引用,对吗? (所以,当我给
打电话oogie_boogie()时,只创建了一个Foo对象?)


谢谢,

Joe < br>

解决方案

Joe Van Dyk写道:



struct Foo {};

Foo oogie_boogie()
{
Foo a;
返回一个;
}

oogie_boogie()返回对a的引用Foo对象,对吧? (所以,当我打电话给oogie_boogie()时,只创建了一个Foo对象?)



它返回一个Foo的实例,而不是一个引用。


编译器可能会优化掉额外的副本。


-

Ian Collins。


Joe Van Dyk< jo ******** @ boeing.com>写道:



struct Foo {};

Foo oogie_boogie()
{
Foo a;
返回一个;
}

oogie_boogie()返回对Foo对象的引用,对吗?


不,它会返回Foo。如果你想要它返回一个参考,那么你需要声明这个函数:


Foo& oggie_boogie();

(所以,当我调用oogie_boogie()时,只创建了一个Foo对象?)




理论上, Foo a; line将构造一个Foo,然后

返回一个;将复制 - 构建另一个Foo。在实践中,几乎任何

编译器都会优化掉额外的复制构造,只需创建

一个对象。


< blockquote>

Roy Smith写道:

Joe Van Dyk< jo ******** @ boeing.com>写道:



struct Foo {};

Foo oogie_boogie()
{
Foo a;
返回一个;
}

oogie_boogie()返回对Foo对象的引用,对吗?



不,它返回一个Foo 。如果你想要它返回一个参考,你将不得不声明这个功能:

Foo& oggie_boogie();




当然我们永远不会想要返回临时引用,

我们会吗? ;)


Hi,

struct Foo {};

Foo oogie_boogie()
{
Foo a;
return a;
}
oogie_boogie() returns a reference to a Foo object, right? (so, when I
call oogie_boogie(), only one Foo object is created?)

Thanks,
Joe

解决方案

Joe Van Dyk wrote:

Hi,

struct Foo {};

Foo oogie_boogie()
{
Foo a;
return a;
}
oogie_boogie() returns a reference to a Foo object, right? (so, when I
call oogie_boogie(), only one Foo object is created?)


It returns an instance of a Foo, not a reference.

The compiler will probably optimise away the extra copy.

--
Ian Collins.


Joe Van Dyk <jo********@boeing.com> wrote:

Hi,

struct Foo {};

Foo oogie_boogie()
{
Foo a;
return a;
}
oogie_boogie() returns a reference to a Foo object, right?
No, it returns a Foo. If you wanted it to return a reference, you
would have had to declare the function:

Foo& oggie_boogie();
(so, when I call oogie_boogie(), only one Foo object is created?)



In theory, the "Foo a;" line will construct a Foo, and then the
"return a;" will copy-construct another Foo. In practice, almost any
compiler will optimize away the extra copy-construct and just create
the one object.



Roy Smith wrote:

Joe Van Dyk <jo********@boeing.com> wrote:

Hi,

struct Foo {};

Foo oogie_boogie()
{
Foo a;
return a;
}
oogie_boogie() returns a reference to a Foo object, right?



No, it returns a Foo. If you wanted it to return a reference, you
would have had to declare the function:

Foo& oggie_boogie();



But of course we would never want to return a reference to a temporary,
would we? ;)


这篇关于愚蠢的回归对象问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆