许多类之间的静态变量初始化顺序
c.h
class C{
static string s;
}
c.cpp
string C::s=D::staticMethod();
d.h
class D{
static string s;
static string staticMethod();
}
d.cpp
string D::s("some string");
string D::staticMethod(){
return s; (***)
}
这是行不通的,它会停止在 (*),因为 D::s 尚未初始化。有没有办法让 d.cpp 在 c.cpp 之前编译?
c.h
class C{
static string s;
}
c.cpp
string C::s=D::staticMethod();
d.h
class D{
static string s;
static string staticMethod();
}
d.cpp
string D::s("some string");
string D::staticMethod(){
return s; (***)
}
this won't work, it stops at (*) because D::s has not been initialized.Is there any way to get d.cpp compiled before c.cpp?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
恕我直言,最佳参考:
什么是“静态初始化顺序惨败”?
Best reference for this IMHO:
What's the "static initialization order fiasco"?
简而言之,不。如果您确实需要这种行为,请查找单例模式。但也要仔细考虑您的应用程序中是否需要这种耦合。
In short, no. If you really need this sort of behaviour, look up the Singleton pattern. But also think carefully whether you need that sort of coupling in your application.