C++11 标准第 3.6.2 条、第 4 条规定:
“具有静态存储持续时间的非局部变量的动态初始化是否在 main 的第一个语句之前完成是由实现定义的。”
C++ 标准将静态初始化与动态初始化区分开来,静态初始化仅需要计算编译时常量。我相信急切静态初始化的可观察效果是有保证的。无论如何,我对急切的初始化感兴趣。
鉴于此行为是实现定义的并给定现有实现,是否有一种良好的可移植方法来强制急切初始化?这是编译器或链接器做出的决定吗?我认为 dlopen() 与 RTLD_NOW 给出了这种行为,所以我怀疑这是可能的,并且它是一个链接器选项。
具体来说,我想动态链接库并让全局变量的构造函数在 main() 之前运行。
可以在这个问题中找到可能用法的示例:
通过静态库链接时 C++ 全局变量未初始化,但使用源代码编译时正常 https://stackoverflow.com/questions/9459980/c-global-variable-not-initialized-when-linked-through-static-libraries-but-ok
这个想法是拥有一些在主函数内访问的类的全局注册表,并且动态链接库中的类可以通过初始化静态变量将其自身添加到其中。该静态变量获取全局注册表并向其中添加一些内容。这有效有时但不可靠且不可预测,因为它依赖于未定义的行为。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)