基于"c ++ primer",静态数据成员的类型可以是它所属的类类型:
class Bar {
public:
// ...
private:
static Bar mem1; // ok
};
Run Code Online (Sandbox Code Playgroud)
但是,我很难想象这样一个功能有用的场景.我的意思是,为什么你需要一个变量作为类类型?有人可以给我一些例子吗?谢谢.
单身人士是一种可能的用途.另一种可能的用途是提供一个预先打包的即用型实例.
假设您的类具有昂贵的构造函数,使用大量内存并且您需要创建许多实例.好消息是大多数情况都是相同的.您可以使用最广泛使用的副本静态,并在需要时重复使用它.
例.Bar可以用整数构造.从0构造的实例需求量很大.保持静态是一个很好的选择.
class Bar {
public:
Bar(int n) : n_bar(n) {
// if n!=0, construct new instance of Bar, else recycle static instance
}
void foo() const { // note, it is const
if(n_bar==0)
bar0.foo();
else {
// do something
}
}
private:
int n_bar;
static Bar bar0; // initialize to Bar(0)
};
Run Code Online (Sandbox Code Playgroud)
您也可以根据需要创建一整套静态实例(使用std :: map,其中int为键,Bars为值),而不是一个静态成员.