如果不使用静态成员,静态成员变量是否在模板类中初始化?我用它来注册类型。
template<class T>
class A
{
static bool d;
};
template<class T> bool A<T>::d = [](){regist<A<T>>(); return true;}();
int main()
{
A<int> a;
return 0;
}
我找到了一种方法来测试它。它打印 1 而非 2。 regist() 未调用 abd 静态成员未初始化。我的测试是在 VC110 编译器上进行的。我也测试了 online
#include <iostream>
using namespace std;
int i = 1;
template<class T>
void regist()
{
++i;
}
template<class T>
class A
{
static bool d;
};
template<class T> bool A<T>::d = [](){regist<A<T>>(); return true;}();
int main()
{
A<int> a;
cout << i << endl;
return 0;
}
最佳答案
C++ draft standard 的相关部分属于 14
模板,即 14.7.1
隐式实例化第 2 段,其中说(强调我的):
我们还可以看到第 8 段说:
但是,如果您向第二种情况添加显式实例化,如下所示,您将看到 2
作为结果:
template<> bool A<int>::d = [](){regist<A<int>>(); return true;}();
关于c++ - 如果不使用静态成员,静态成员变量是否在模板类中初始化?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19341360/