static关键字一般与内部链接有关,但是类中使用的static关键字有外部链接吗?下面的变量m,n可以在类文件外部访问。
class c {
int i;
int j;
static int m;
static int n;
public:
void zap();
static void clear();
};
答案 0 :(得分:10)
右。
关键字static
严重超载,含义太多:
答案 1 :(得分:2)
正如我在my comment中所述,static
成员只是与类相关联的成员,而不是单个对象。
static
个成员属于类;对于变量,它们可以在没有对象的情况下访问,并在例如实例之间共享。struct Foo { static void *bar; static void *fu(); }
因此
Foo::bar
和Foo::fu
是合法的。
它们在C ++ 03标准的第9.4节中介绍;
类的数据或函数成员可以在类定义中声明为
static
,在这种情况下,它是类的静态成员。- 醇>
可以使用 qualified-id 表达式
static
引用类s
的{{1}}成员X
;没有必要使用类成员访问语法(5.2.5)来引用X::s
成员。可以使用类成员访问语法引用static
成员,在这种情况下, object-expression 将被评估static
class process { public: static void reschedule(); }; process& g(); void f() { process::reschedule(); // OK: no object necessary g().reschedule(); // g() is called }
成员可以直接在其类的范围内或在其类的派生类(第10条)的范围内引用;在这种情况下,static
成员被称为使用 qualified-id 表达式,并使用的嵌套名称说明符 qualified-id 命名引用static
成员的类范围。static
...
答案 2 :(得分:1)
你可以说静态成员是类的成员而不是任何特定的对象实例。也就是说,它们对所有对象实例都具有相同的值。
静态成员函数虽然没有值,但在其他方面是相同的。它们可以被视为类的一部分,而不是每个对象实例的唯一性。这意味着它们没有this
指针,无法访问非静态成员变量。