Che*_*Alf 10
假设您正在谈论静态数据成员,因为静态函数成员没有问题,针对不同情况有各种技术:
简单的整数类型,const未采用的地址:
在类定义的声明中给它一个值.或者你可以使用一种enum类型.
其他类型,逻辑上不变:
使用C++ 11 constexpr.
不一定是常数,或者你不能使用constexpr:
使用模板化的静态技巧或Meyers的单例.
迈耶斯单身人士的例子:
class Foo
{
private:
static
auto n_instances()
-> int&
{
static int the_value;
return the_value;
}
public:
~Foo() { --n_instances(); }
Foo() { ++n_instances(); }
Foo( Foo const& ) { ++n_instances(); }
};
Run Code Online (Sandbox Code Playgroud)
模板化静态技巧的示例:
template< class Dummy >
struct Foo_statics
{
static int n_instances;
};
template< class Dummy >
int Foo_statics<Dummy>::n_instances;
class Foo
: private Foo_statics<void>
{
public:
~Foo() { --n_instances; }
Foo() { ++n_instances; }
Foo( Foo const& ) { ++n_instances; }
};
Run Code Online (Sandbox Code Playgroud)
免责声明:编译器没有触及任何代码.