0

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

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

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

此外,对于解决方法或实现相同结果的其他方法的任何建议(除了导出相关函数并显式调用它们main显然是后备)?

4

1 回答 1

2

变量是静态的,因此仅在它们各自的翻译单元中可见,但类型不是。将你的结构放在匿名命名空间中怎么样?

于 2012-06-16T01:56:01.300 回答