这个特定的代码是否容易出现静态初始化顺序惨败?也就是说,当我访问 B 的静态成员函数时,我可以假设编译单元“B”中的静态初始化已经完成吗?
// a.h
struct A {
static int foo();
static int var;
}
// a.cpp
#include <a.h>
int A::foo() {
return var;
}
int A::var = 42;
// b.h
struct B {
B::B();
static int var;
}
// b.cpp
#include <b.h>
#include <a.h>
B::B() {
var = A::foo();
}
// c.h
struct C {
static B b;
}
// c.cpp
B C::b;
或者我有这样的代码:
// a.h
static int &A::var();
// a.cpp
int &A::var() {
static value = 42;
return value;
}
int A::foo() {
return var();
}
对标准的引用将不胜感激。