C++中的C++静态与静态相同吗?

C++中的C++静态与静态相同吗?,c++,c,class,static,C++,C,Class,Static,我在CPP中努力使用静态关键字 经过实验,我发现: 静态成员不在类内。我计算了添加静态成员前后的类大小,发现它们是相同的。 我想到的一个解释是,类名可能成为这个静态成员的命名空间范围?那个成员在班外吗? 函数不在类内,类具有类似对象指针的隐式参数。然而,如果类中没有字段,但是有一堆函数,为什么类的大小将是1而不是0?但是指针是否也为函数提供了一个作用域,允许函数访问私有成员或函数本身具有类名称空间。 我们可以使用类名和对象来访问静态字段和函数,为什么我们可以这样做。如果类名是静态函数的名称空间,

我在CPP中努力使用静态关键字

经过实验,我发现:

静态成员不在类内。我计算了添加静态成员前后的类大小,发现它们是相同的。 我想到的一个解释是,类名可能成为这个静态成员的命名空间范围?那个成员在班外吗? 函数不在类内,类具有类似对象指针的隐式参数。然而,如果类中没有字段,但是有一堆函数,为什么类的大小将是1而不是0?但是指针是否也为函数提供了一个作用域,允许函数访问私有成员或函数本身具有类名称空间。 我们可以使用类名和对象来访问静态字段和函数,为什么我们可以这样做。如果类名是静态函数的名称空间,为什么我们可以使用对象来访问它?对象本身是否具有类命名空间? 然后我尝试在类中声明和定义一个静态成员,当然失败了,但我想知道为什么?为什么我们不能在课堂上开始呢?

XD英语不是我的母语,对不起我的语法错误XD.< /P> < P>静态C++中的语义与C: 对于变量,它定义了具有单个实例的全局变量,并且只能在有限的范围内访问。这一有限范围是: 如果变量是由函数定义的,则为编译单元。请注意,命名空间中定义的静态变量可以通过显式范围解析在整个编译单元中访问。 函数的作用域(如果它是在函数中定义的), 对于函数,它限制了它们对编译单元的可见性。 在类的上下文中,有一点不同。静态在此表示变量或函数独立于类的对象:

对于成员变量,这意味着只有一个变量实例,由类的所有成员共享。请注意,如果要将其初始化为特定值,除了在类中声明它之外,还必须在某个地方定义它。 对于成员函数,这意味着函数不能依赖非静态成员

关键字静态在C中已经严重重载,C++添加了 还有一些额外的含义。要真正讨论静态的含义, 您需要指定上下文:在名称空间范围内,静态影响 调用的链接:正在声明的名称是否引用中的同一实体 不同来源,或仅在这一特定来源。在其他地方,对于数据, 它指定实体的生存期,而不是实体名称的绑定 实体:存在一个静态成员变量的实例 独立于包含它的类的任何实例。如果是会员 函数是静态的,这意味着它没有指向特定 实例,并且可以在没有任何实例的情况下调用

关于你的具体问题:

静态成员不是类的任何实例的一部分,因此它不会影响类的大小,而类的大小实际上就是其实例的大小。静态成员在作用域和访问控制方面仍然是成员,但它具有静态生存期,并且存在于类的任何实例之外

具体对象的sizeof不能为零,因为即使它不包含数据,也不能与内存中的任何其他对象具有相同的地址;如果定义了此类对象的数组,则第一个元素的地址必须不同于第二个元素的地址,并且sizeof返回必须添加到第一个元素的地址才能获得第二个元素的地址的字节数。对象的物理大小可以是0,至少在某些情况下是这样的:例如,如果基类是该类型的唯一基类,则它的物理大小可以是0

我不知道你到底在问什么。当你写像a.b这样的东西时,b在a的范围内被查找;如果b是静态成员,则a仅用于确定范围。在编写A::b时,A::还指定将在其中进行名称查找的范围

从技术上讲,静态数据成员的声明不是定义。原因是,或者至少是最初的原因是,它必须独立于类的任何实例而放在内存中。在早期,这是当时存在的编译器技术所要求的,即使在今天,您通常也不希望在定义类的头文件中包含初始化数据


AFAIK静态类成员不需要使用类实例,并且由于明显的原因,不会传递this指针。您能发布示例代码来说明您期望的与您看到的吗?我们可以解释这个行为。静态在C中有两个含义,它们在C++中是相同的。C++增加了另一个意思,它根本不在C中。我怀疑这个问题。
实际上,您并没有在源文件中定义静态变量,只是在头文件或源文件中声明了它。需要定义它,以便编译器知道它的去向。(类似于在头文件中声明一个Exchange变量或函数,那么您需要在源文件中某个地方定义编译器,实际的事情是:@ ImibIsC++添加了两个附加的含义,一个用于成员函数,另一个用于成员数据。海报上清楚地谈到了C++,因为他询问了班级成员。他应该删除C标签。挑剔:静态变量也可以是函数的局部变量。您忘了提到静态在函数范围内的含义class@self对解释有点简短,尤其是对于静态成员函数。我已经编辑了详细说明