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

Posted

技术标签:

【中文标题】C++ 静态构造函数返回一个容器【英文标题】:C++ static constructor returning a container 【发布时间】:2017-05-17 08:36:06 【问题描述】:
class Foo

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

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

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

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

但是我这辈子从未见过的是构造函数返回(在这种情况下)向量容器。

这在 C++ 中可行吗?

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

【问题讨论】:

我认为这是一个错误。构造函数不能返回并且不能是静态的。 该代码在 C++ 中是非法 【参考方案1】:

不,代码是无效的 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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

答案是正确的:构造函数不能返回。

补充几点:

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

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

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

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

【讨论】:

【参考方案4】:

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

为什么不使用独立函数?

【讨论】:

以上是关于C++ 静态构造函数返回一个容器的主要内容,如果未能解决你的问题,请参考以下文章

C++学习-vector容器构造函数以及赋值

C++ 中类的构造函数理解

如何在构造函数 C++ 中使用静态变量?

构造函数用于创建类的实例对象,构造函数名应与类名相同,返回类型为void.

C++ 静态工厂构造函数

静态类属性,C++ 中的多个构造函数