使用构造函数返回

时间:2010-04-15 03:22:08

标签: c++ return-value constructor

只是一个简单的问题。

我编写了一些返回自定义类Command的代码,我写的代码似乎运行正常。我想知道是否有任何理由我不应该这样做。它是这样的:

Command Behavior::getCommand ()
{
  char input = 'x';

  return Command (input, -1, -1);
}

无论如何,我读到构造函数不具有返回值,但这在g ++中有效。

感谢您的任何建议,

里斯

4 个答案:

答案 0 :(得分:7)

构造函数本身没有返回值。这样做是构造一个临时的Command对象并将构造的objet返回给调用者。它实际上就像你说的那样:

Command temp(input, -1, -1);
return temp;

它适用于任何C ++编译器。

答案 1 :(得分:2)

getCommand不是构造函数。以上是完全有效的,并且通常也是高效的,因为返回值优化(RVO),如果你实例化一个局部变量并返回它,那么(我认为)不适用。

答案 2 :(得分:1)

构造函数没有返回值;你是显式构造一个类的临时实例,并返回它。这没有什么不妥,除了它会复制。

如果你想避免复制,你有几个选项,其中一个选项是Command*的out参数,并使用new和delete。

答案 3 :(得分:0)

您没有具有返回值的构造函数。 Command::Command(char, int, int)是你的构造函数。

你有一个返回一个对象的方法,这是完全正常的。