3

如果存在依赖关系,编译器能否正确处理静态变量的初始化顺序?例如,我有

a.h

struct A { static double a; };

a.cpp

#include "a.h"
double A::a = 1;

b.h

struct B { static double b; };

b.cpp

#include "b.h"
#include "a.h"
double B::b = A::a;
4

2 回答 2

6

在翻译单元中,指定了这种初始化的顺序。跨翻译单元的顺序未指定。

因此,在您的情况下,由于静态默认情况下初始化为零,B::b因此肯定是 0 或 1。

于 2013-09-16T18:24:14.873 回答
1

没有。C++ 标准未定义静态初始化顺序。你可以希望你的编译器很聪明,但不能保证。

想想如果你也有一个用“b”分配的“c”变量,而“a”变量用“c”分配会发生什么。然后你有一个循环依赖,它会编译,但你最终会得到垃圾值。

于 2013-09-16T18:26:16.343 回答