c++ - 在 C++ 中没有静态构造函数的理由是什么?

标签 c++ constructor language-design language-features static-constructor

在 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/

相关文章:

c++ - 连接 OpenCV Mat 和单个值

c++ - std::vector 和构造函数

vb.net - C# 和 VB 中类型参数差异的语法选择

c++ - 没有公共(public)构造函数的类模板作为另一个类模板的成员

Javascript - 为什么没有递归?

C++ 异常和信号处理程序

.net - 编写使用 .NET 的语言的优点、缺点和困难

c++ - Windows Mobile 6.5——当对话框空闲时调用函数?一个 WM_KICKIDLE

c++ - "No definition of main in vertex shader"在 OpenGL 程序链接状态检查期间

c++ - 进程外使用MiniDumpWriteDump时如何获取异常信息?