静态初始化器

时间:2012-06-16 01:51:58

标签: c++ initialization

我正在摆弄一些可能的方法来运行一些“这些东西需要在程序启动时初始化”代码,同时保持它们各自模块的本地,并提出了这个:

static struct init {
    init() {
        // do stuff
    }
} _;

当我把它放在模块a.cc中时,它工作正常。当我把它放在模块b.cc中时也不那么好--A的版本被调用了两次而B的版本根本没有。我正在搞好,编译器错误,它对这两个具有相同名称的函数感到困惑,但令我惊讶的是,在进一步测试时,它在Microsoft C ++和GCC中的行为方式完全相同。这两个编译器是否碰巧有相同的错误,或者是否有关于语言语义的缺失?

此外,任何有关变通方法的建议或其他方法可以获得相同的结果(除了导出相关函数并明确地从main调用它们,这显然是后备)?

1 个答案:

答案 0 :(得分:2)

变量是静态的,因此仅在各自的翻译单元中可见,但类型不是。如何将结构放在匿名名称空间中?