所以我有这个文件
template <typename T>
class TestStatic {
public:
static int staticVal;
};
//static member initialization
template<typename T> int TestStatic<T>::staticVal;
我不明白为什么我必须实例化Staticval而不是在类定义中已经实例化了吗?还会为每种模板参数类型生成一个静态变量吗?
谢谢。
答案 0 :(得分:2)
此行:
static int staticVal;
类中的是声明,而不是定义。这就是为什么您必须像这样在类外定义它:
template<typename T>
int TestStatic<T>::staticVal = 0;
是的,这将为所有类型T
的成员定义。
或者,您可以定义内联静态变量,如下所示:
template <typename T>
class TestStatic {
public:
inline static int staticVal = 0;
};
具有与上述相同的语义,但让您避免在类外单独定义静态变量。
答案 1 :(得分:1)
由于声明为静态的变量仅在分配给单独的静态存储中的空间时才初始化一次,因此,类中的静态变量由对象共享。对于不同的对象,不能有相同静态变量的多个副本。同样由于这个原因,不能使用构造函数来初始化静态变量。
请参考以获取更多信息:Reference