类外的静态变量实例化

所以我有这个文件

template <typename T>
class TestStatic {
public:
    static int staticVal;
};

//static member initialization
template<typename T> int TestStatic<T>::staticVal;

我不明白为什么我必须实例化Staticval是不是已经在类定义中实例化了?它还为每种模板参数类型生成一个静态变量吗?

提前致谢。

评论
Norma
Norma

由于声明为static的变量仅在分配给单独的静态存储中的空间时才初始化一次,因此,类中的static变量由对象共享。对于不同的对象,不能有相同静态变量的多个副本。同样由于这个原因,不能使用构造函数来初始化静态变量。

Please refer for more information: Reference

点赞
评论
怪我瞎i
怪我瞎i

这行:

static int staticVal;

类内部是声明,而不是定义。这就是为什么您必须像这样在类外定义它:

template<typename T> 
int TestStatic<T>::staticVal = 0;

And yes, this will generate a definition of the member for all types T.

另外,您可以定义静态变量内联,如下所示:

template <typename T>
class TestStatic {
public:
   inline static int staticVal = 0;
};

它具有与上述相同的语义,但让我们避免必须在类外部单独定义静态变量。

点赞
评论