在 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");
}
};
在没有静态构造函数的情况下,很难有静态 vector ,并用值填充它,如上所示。静态构造函数优雅地解决了这个问题。我们可以以非常有条理的方式初始化静态成员。
那么为什么'C++'没有静态构造函数呢?毕竟其他语言(比如C#)都有静态构造函数!
最佳答案
使用静态初始化顺序问题作为不向语言引入此功能的借口一直是现状问题 - 之所以没有引入它是因为它没有引入,人们一直认为初始化顺序是一个不介绍它的理由,即使订单问题有一个简单且非常直接的解决方案。
初始化顺序,如果人们真的想解决这个问题,他们会有一个非常简单直接的解决方案:
//called before main()
int static_main() {
ClassFoo();
ClassBar();
}
带有适当的声明:
class ClassFoo {
static int y;
ClassFoo() {
y = 1;
}
}
class ClassBar {
static int x;
ClassBar() {
x = ClassFoo::y+1;
}
}
所以答案是,没有理由不存在,至少不是技术原因。
关于c++ - 在 C++ 中没有静态构造函数的理由是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5301666/