1
#include <iostream>
using namespace std;
class MyClass
{
private:
    static int x;
static int calc(int a, int b)
{
    cout << "chekcing !! ";
    return b * a;
}
};
int MyClass::x = 1;
int main()
{
 MyClass::calc(1,2);
 MyClass::x += 3;
 return 0 ;
}

问题:据我所知静态成员不是类的一部分,那么为什么我们要检查访问说明符?

4

1 回答 1

6
  • 每个static成员在该类的所有实例中共享。因此它们不属于某个特定的类实例,而是属于该类本身。
  • 访问规范规则是每个类而不是每个对象

从上面看,访问规范规则适用于static成员是合乎逻辑的。

您的困惑源于这样一个事实,即如果您检查具有静态成员的类的大小,则不会因静态成员的存在而产生开销。这种行为是正确的。静态成员对类的大小没有贡献,但它们仍然是类的一部分,标准明确说明了这一点。


参考:
9.4.2 静态数据成员:
§1:

静态数据成员不是类的子对象的一部分。如果声明了静态数据成员,则thread_local每个线程都有该成员的一份副本。如果未声明静态数据成员,则thread_local 该数据成员的一份副本由该类的所有对象共享。

于 2013-05-08T07:08:08.023 回答