所以我有这个文件
template <typename T>
class TestStatic {
public:
static int staticVal;
};
//static member initialization
template<typename T> int TestStatic<T>::staticVal;
我不明白为什么我必须实例化Staticval是不是已经在类定义中实例化了?它还为每种模板参数类型生成一个静态变量吗?
提前致谢。
所以我有这个文件
template <typename T>
class TestStatic {
public:
static int staticVal;
};
//static member initialization
template<typename T> int TestStatic<T>::staticVal;
我不明白为什么我必须实例化Staticval是不是已经在类定义中实例化了?它还为每种模板参数类型生成一个静态变量吗?
提前致谢。
由于声明为static的变量仅在分配给单独的静态存储中的空间时才初始化一次,因此,类中的static变量由对象共享。对于不同的对象,不能有相同静态变量的多个副本。同样由于这个原因,不能使用构造函数来初始化静态变量。
Please refer for more information: Reference
这行:
类内部是声明,而不是定义。这就是为什么您必须像这样在类外定义它:
And yes, this will generate a definition of the member for all types
T
.另外,您可以定义静态变量内联,如下所示:
它具有与上述相同的语义,但让我们避免必须在类外部单独定义静态变量。