【发布时间】:2010-12-05 00:28:27
【问题描述】:
我正在阅读 Qt 编码约定文档并看到以下段落:
任何具有构造函数或需要运行要初始化的代码的东西都不能用作库代码中的全局对象,因为它是未定义的,何时运行该构造函数/代码(在首次使用时,在库加载时,在 main( ) 或根本没有)。即使为共享库定义了初始化程序的执行时间,在插件中移动代码或静态编译库时也会遇到麻烦。
我知道theory 说什么,但我不明白“一点也不”的部分。有时我使用非 POD 全局 const 静态变量(例如:QString),但我从未想过它们可能没有被初始化……这是否特定于共享对象/DLL?这只发生在损坏的编译器上吗?
你觉得这条规则怎么样?
【问题讨论】:
-
如果你不使用它们,你的 QString 可能不会被初始化。但是如果你使用它们,它们将被初始化。即使这是在使用之前(即在对象上调用 a 方法之前)。
标签: c++ qt static initialization shared-libraries