这是安全的假设初始化B和C这里时A
被初始化为1?初始化静态常量成员变量的基础上相互
struct Test {
static const int A = 1;
static const int B = A + 1;
static const int C = B + 1;
};
int main() {
printf("%i %i %i\n", Test::A, Test::B, Test::C); ==> 1 2 3
}
有关非整静态成员
struct Test2 {
constexpr static const Test A = Test();
constexpr static const Test B = A;
constexpr static const Test C = B;
};
clang
-Wall
问题没有任何警告的内容。
如果他们在不同的翻译单位定义? (实际上,在这种情况下,由于只有静态初始化参与,它是安全的,无论配置,但你有关于一般情况下是正确的。) –
@JamesKanze是的 - 这是一个正确的 –
@JamesKanze如果他们在不同的翻译单元中定义的初始化顺序是不可预知的。参见“静态初始化失败”:http://www.parashift.com/c++-faq/static-init-order.html – jaho