在输入main之前调用全局声明的类的构造函数.虽然这可能会让代码的新读者感到困惑,因为它很少这样做,但它一定是个坏主意吗?
jal*_*alf 18
这不一定是个坏主意,但通常是的.
首先,它是全局数据,而全局数据通常是一件坏事.你拥有的全球状态越多,推理你的计划就越难.
其次,C++不保证在不同的翻译单元(.cpp文件)中定义的静态对象的初始化顺序 - 所以如果它们相互依赖,你可能会遇到麻烦.
是的,这很糟糕.由于您无法捕获异常并处理它们,因此将使用默认处理程序.在C++中,这意味着调用terminate ...
示例:内容 a.cpp
#include <stdexcept>
int f() { throw std::runtime_error("boom"); return 42; }
int i = f();
int main(int argc, char* argv[])
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
产量: g++ a.cpp && ./a.out
terminate called after throwing an instance of 'std::runtime_error'
what(): boom
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)
你可以尝试try ... catch在你的主要添加一个,这将无济于事.
编辑:贾尔夫的观点也是有效的.听听他的建议.