3

假设一个函数创建一个类并返回:

Foo getFoo ()
{
   return Foo ("bar");
}

第二种方法:

Foo getFoo ()
{
   Foo foo ("bar");
   return foo;
}

现在我称之为const Foo & myFoo = getFoo()

第一种方法更有效吗?他们对我来说看起来一样,因为他们都创建了一个临时变量并返回它,我错了吗?

4

1 回答 1

4

它们基本上是相同的,尽管第一个中的复制省略将被称为“返回值优化”(RVO),而在第二个中它将被称为“命名返回值优化”(NRVO)。曾经有编译器可以做 RVO 但不能做 NRVO。

于 2012-10-27T15:47:15.500 回答