static关键字一般与内部链接有关,但是类内部使用的static关键字有外部链接对吗?下面的变量 m、n 可以在类文件之外访问。
class c {
int i;
int j;
static int m;
static int n;
public:
void zap();
static void clear();
};
正确的。
该关键字static
严重超载,具有太多不同的含义:
正如我在评论中所说,static
成员是仅与类相关联的成员,而不是与单个对象相关联的成员。
static
成员属于该类;对于变量,它们可以在没有对象的情况下访问并在实例之间共享,例如struct Foo { static void *bar; static void *fu(); }
所以
Foo::bar
并且Foo::fu
是合法的。
它们在 C++03 标准的 §9.4 中介绍;
类的数据或函数成员可以
static
在类定义中声明,在这种情况下,它是类的静态成员。可以使用qualified-id表达式来引用类的
static
成员;不必使用类成员访问语法 (5.2.5) 来引用成员。可以使用类成员访问语法来引用成员,在这种情况下,对象表达式被评估s
X
X::s
static
static
class process { public: static void reschedule(); }; process& g(); void f() { process::reschedule(); // OK: no object necessary g().reschedule(); // g() is called }
成员可以在
static
其类的范围内或在从其类派生的类的范围内(第 10 条)直接引用;在这种情况下,static
成员被引用就好像使用了限定 ID表达式,限定 ID 的嵌套名称说明符命名了引用该成员的类范围。static
int g(); struct X { static int g(); }; struct Y : X { static int i; }; int Y::i = g(); // equivalent to Y::g();
...
您可以说静态成员是类的成员,而不是任何特定的对象实例。也就是说,它们对于所有对象实例具有相同的值。
静态成员函数虽然没有值,但在其他方面是相同的。它们不是对每个对象实例都是唯一的,而是可以看作是类的一部分。这意味着它们没有this
指针并且不能访问非静态成员变量。