【发布时间】:2012-08-27 23:57:48
【问题描述】:
static关键字一般与内部链接有关,但类内部使用的static关键字有外部链接对吗?下面的变量 m、n 可以在类文件之外访问。
class c {
int i;
int j;
static int m;
static int n;
public:
void zap();
static void clear();
};
【问题讨论】:
-
static成员属于类;对于变量,它们可以在没有对象的情况下访问并在实例之间共享,例如struct Foo { static void *bar; static void *fu(); },所以Foo::bar和Foo::fu是合法的。 -
标准没有严格要求,但可能(或可能不会!)有助于将静态成员视为在编译时设置的固定地址意义上的静态成员,而非静态成员数据可以放在堆栈或堆中的各种运行时确定的地址。
static成员基本上类似于全局变量,只是它们的标识符属于声明它们的类的范围。