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++ 静态构造函数返回一个容器的主要内容,如果未能解决你的问题,请参考以下文章