愚蠢的回归对象问题 [英] Silly returning-an-object question
问题描述
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屋!