Dav*_*vid 0 c++ global-variables static-initialization
编译器是否具有生成所有全局变量的依赖关系树所需的所有信息,并为它们创建定义良好且正确的初始化顺序?我意识到你可以用全局变量写一个循环依赖 - 只做那种情况下未定义的行为 - 并且编译器可以警告并且可能有关它的错误.
通常这种情况的原因是它会给编译器制造商带来负担,或导致编译速度显着降低.我没有任何指标或证据表明在这种情况下这些都不是真的,但我倾向于两者都不是真的.
嗯,想象下面的设置,这是完全有效的C++,但分析很棘手:
// TU #1
bool c = coin();
Run Code Online (Sandbox Code Playgroud)
// TU #2
extern bool c;
extern int b;
int a = c ? b : 10;
Run Code Online (Sandbox Code Playgroud)
// TU #3
extern bool c;
extern int a;
int b = c ? 20 : a;
Run Code Online (Sandbox Code Playgroud)
很明显,TU#1需要首先进行初始化,但那么呢?带有引用静态的标准解决方案允许您使用标准C++正确编写此代码,但通过修复全局初始化顺序来解决此问题似乎很棘手.
归档时间: |
|
查看次数: |
121 次 |
最近记录: |