静态变量已用另一个初始化



我知道静态订单初始化失败,但我想知道以下是否也会触发它:

const static Point center = CalculateCenter();
static Point currentPoint = center;

我想要两个静态变量(TU中的内部链接),一个是初始化的常量,另一个在大量实例中共享,但一开始它应该具有相同的center值。

这会引发静态订单初始化失败吗?如果是,我应该如何对此进行编码?

如果它们都在同一个编译单元中,那么就可以了(如果您对它们的排序正确的话)。但如果它们不是,那么由于初始化顺序的原因,这是未定义的行为。但是,您可以将center声明为constexpr而不是const,那么center在编译时是已知的,这应该是可以的,但是CalculateCenter()也需要是constexpr,这在您的情况下可能是不可能的。

在一个编译单元中,顺序定义得很好,并且遵循声明顺序。这个问题出现在不同的单元中,但这里没有这种情况,所以代码完全没有问题。

正如前面的回答所说,在同一个翻译单元中没有问题。秩序得以保留。

如果两个静态变量不在同一个翻译单元中,则应使用以下函数:

//somewhere in a class X
static const Point& center() { const static Point _center = CalculateCenter(); return _center; }
//somewhere in a class Y
static Point& currentPoint() { static Point _current_point = X::center(); return _current_point; }

然后,当您需要变量时,可以使用函数访问器X::center()Y::currentPoint()

相关内容

  • 没有找到相关文章

最新更新