【发布时间】:2011-07-15 04:08:24
【问题描述】:
C++ 中没有静态构造函数的原因是什么?
如果允许,我们将在一个地方以一种非常有组织的方式初始化其中的所有静态成员,如下所示:
//illegal C++
class sample
{
public:
static int some_integer;
static std::vector<std::string> strings;
//illegal constructor!
static sample()
{
some_integer = 100;
strings.push_back("stack");
strings.push_back("overflow");
}
};
在没有静态构造函数的情况下,很难有静态向量,并用值填充它,如上所示。静态构造函数优雅地解决了这个问题。我们可以以非常有条理的方式初始化静态成员。
那么为什么'C++'没有静态构造函数呢?毕竟其他语言(比如C#)都有静态构造函数!
【问题讨论】:
-
搜索“静态初始化订单惨败”。
-
@Nawaz:按什么顺序?这将如何与 C++ 之前的对象格式联系起来?
-
@Matti:你在谈论这个排序的东西,好像运行静态构造函数显然是不可能的。
-
@Matti:我想说的是在静态对象的构造函数之前(依次在
main之前执行),按照“实现定义”的顺序。我认为在 C++ 中使用静态构造函数没有什么不可能的,我认为他们只是忘记/不想给编译器增加额外的复杂性/假设static对象足以满足这些目的。 -
@Nawaz:谢谢。顺便说一句,
static对象初始化的“实现定义”顺序已经到位(参见第 3.6.2 节)。
标签: c++ constructor language-design language-features static-constructor