Tag: 初始化顺序

这个自我初始化是否有效?

我有这个问题,我早些时候想过,但认为这不是微不足道的回答 int x = x + 1; int main() { return x; } 我的问题是,如果程序的行为是有效的,是定义的还是未定义的。 如果定义了,主要是已知的x的值?

C ++静态初始化顺序

当我在C ++中使用静态variables时,我经常最终想要初始化一个variables传递给它的构造函数。 换句话说,我想创build相互依赖的静态实例。 在一个.cpp或.h文件中,这不是一个问题:实例将按照它们声明的顺序创build。 但是,如果要用另一个编译单元中的实例初始化静态实例,则该顺序似乎无法指定。 其结果是,根据天气情况,可能发生依赖于另一个的实例被构造,并且仅在之后才构造另一个实例。 结果是第一个实例初始化不正确。 有谁知道如何确保以正确的顺序创build静态对象? 我已经search了很长时间的解决scheme,尝试所有的解决scheme(包括施瓦茨计数器解决scheme),但我开始怀疑是否有一个真正有效的解决scheme。 一个可能性是静态函数成员的技巧: Type& globalObject() { static Type theOneAndOnlyInstance; return theOneAndOnlyInstance; } 的确,这确实有效。 令人遗憾的是,您必须编写globalObject()。MemberFunction()而不是globalObject.MemberFunction(),导致有些令人困惑和不雅的客户端代码。 更新:谢谢你的反应。 遗憾的是,我似乎回答了我自己的问题。 我想我必须学会和它一起生活…