编译和链接C ++库或程序时,无法保证翻译单元之间静态C ++对象的初始化顺序。 GCC offers init_priority
解决静态存档,共享对象和程序的问题:
init_priority(优先级)
在标准C ++中,在命名空间范围内定义的对象保证为
严格按照其中的顺序进行初始化 给定翻译单元中的定义。不保证
翻译单元的初始化。但是,GNU C ++允许使用 用户控制在
定义的对象的初始化顺序 具有init_priority属性的命名空间范围,通过指定
相对优先级,一个恒定的积分表达式,目前有界 介于101和65535之间。数字越小表示越高 优先级。
(静态存档似乎最棘手,因为它(可能)会被其他人链接。
Microsoft为控制翻译单元中静态C ++对象的初始化顺序提供了什么?