我正在摆弄一种可能的方法来运行一些“这些东西需要在程序启动时初始化”代码,同时将它们保持在各自模块的本地,并想出了这个:
static struct init {
init() {
// do stuff
}
} _;
当我把它放在模块中a.cc
时,它工作得很好。当我把它也放在b.cc
不太好的模块中时 - A 的版本被调用了两次,而 B 的版本根本没有。我认为好的,编译器错误,它对具有相同名称的两个函数感到困惑,但令我惊讶的是,在进一步的测试中,它在 Microsoft C++ 和 GCC 中的行为方式完全相同。两个编译器是否碰巧有相同的错误,还是我在语言语义方面遗漏了什么?
此外,对于解决方法或实现相同结果的其他方法的任何建议(除了导出相关函数并显式调用它们main
显然是后备)?