gpt4 book ai didi

c++ - 编译器能否正确处理静态变量的初始化顺序?

转载 作者:太空狗 更新时间:2023-10-29 20:26:42 28 4
gpt4 key购买 nike

下面的案例怎么样?如果存在依赖关系,编译器能否正确处理静态变量的初始化顺序?

啊啊

template<class T>
struct A { static double a; };

template<class T>
double A<T>::a = 1;

b.h

struct B { static double b; };

b.cpp

#include "b.h"
#include "a.h"

double B::b = A<int>::a;

最佳答案

在这种情况下,没有问题,因为 a 是静态初始化的;这保证在 b 的动态初始化之前发生。

更一般地说,如果两者都需要动态初始化,这一个问题。除非您在使用模板成员初始化 b 之前专门化模板成员,否则没有保证的顺序。引用标准(C++11 3.6.2/2):

Definitions of explicitly specialized class template static data members have ordered initialization. Other class template static data members (i.e., implicitly or explicitly instantiated specializations) have unordered initialization.

关于c++ - 编译器能否正确处理静态变量的初始化顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18834855/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com