【发布时间】:2015-02-28 23:22:21
【问题描述】:
我正在为 CPP 中的 static 关键字苦苦挣扎。
经过我的实验,我发现:
-
static成员不在班级内。我在添加静态成员之前和之后计算了类的大小,发现它们是相同的。 我想到的一种解释是,也许类名变成了命名空间(这个静态成员的范围)?那个成员不在课堂上? - 函数不在类内部,有一个像对象指针一样的隐式参数。但是,如果类中没有字段但有一堆函数,为什么类的大小会是 1 而不是 0?但是指针是否也为函数提供了一个范围,允许函数访问私有成员或其自身具有类命名空间的函数。
- 我们可以同时使用类名和对象来访问静态字段和函数,为什么我们可以这样做。如果类名是静态函数的命名空间,为什么我们可以使用对象来访问它?对象本身是否具有类命名空间?
- 然后我尝试在类中声明和定义一个静态成员,当然它失败了,但我想知道为什么?为什么我们不能在课堂上初始化它?
XD 英语不是我的母语,请原谅我的语法错误XD。
【问题讨论】:
-
AFAIK 静态类成员不需要使用类实例,并且出于明显的原因不传递
this指针。 -
您能否发布示例代码来说明您的预期与您所看到的?然后我们可以解释这种行为。
-
static在C中有两种含义,在C++中是一样的。 C++ 增加了另一个 C 中根本没有的含义。 -
我怀疑问题是你实际上没有在源文件中定义你的
static变量,只是在头文件(或源文件)中声明了它。需要对其进行定义,以便编译器“知道”它的去向。 [与在头文件中声明extern变量或函数类似,您需要在源文件中的某处进行定义,以便为编译器提供实际的东西] -
@immibis C++ 增加了两个附加含义,一个用于成员函数,另一个用于成员数据。海报显然是在谈论 C++,因为他问的是班级成员。他应该去掉 C 标签。