C ++静态构造函数返回容器

时间:2017-05-17 08:36:06

标签: c++ c++11 constructor static return-value

class Foo
{
  public:
  static std::vector<std::string> Foo(std::string x, std::string y);
};

我被要求实现上面代码中所示的方法;他们只向我提供了原型。

但是,正如你所看到的,它不是任何一种方法。它是构造函数。

我知道在C ++中我们可以找到一个解决方法(使用嵌套类或其他类),以获得静态构造函数。

但是我生命中从未见过的是一个构造函数返回(在本例中)一个向量容器。

这在C ++中是否可行?

或者,也许,我误解了代码?

4 个答案:

答案 0 :(得分:2)

不,代码是无效的C ++。请尝试编译代码,编译器会告诉你到底出了什么问题:

error: return type specification for constructor invalid
   static std::vector<std::string> Foo(std::string x, std::string y);
                                                                   ^
error: constructor cannot be static member function

答案 1 :(得分:1)

该代码在C ++中是非法的,没有C ++编译器可以编译它。

  • 构造函数是特殊成员函数
  • 构造函数具有返回类型
  • 构造函数具有名称,因此无法获取其地址
  • 特殊会员功能不能是static

答案 2 :(得分:1)

答案是正确的:构造函数无法返回。

还有几点:

@保罗。实际上,可以用C ++模拟静态构造函数。 StackOverflow中有几篇关于此主题的帖子。

@Paul和@WhiZTiM:静态构造函数不仅可以被模拟,而且可以在C ++中合法使用,例如,在设计良好的Singleton实现中。

我不会在这里讨论十几个Singleton实现,它们不是线程安全的。

但是,通过C ++ 11(call_once,once_flag)引入的功能,您可以实现一个线程安全的Singleton,为此,您还需要一个静态构造函数(必须是私有的,以及一个私有的复制构造函数和其相应的赋值运算符)。

答案 3 :(得分:0)

构造函数不能是静态的。如果是,它将无法访问类的成员来初始化它们,这是构造函数的目的。

为什么不使用独立功能?