2013-05-08 83 views
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 ; 
} 

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

+2

静态**成员**不是成员? – Mat 2013-05-08 07:05:42

+1

静态成员是类的一部分,但不是类的实例的一部分。 – Arun 2013-05-08 07:06:36

+1

当然他们是班级的一部分。它们对于所有实例都是一样的。 – 2013-05-08 07:06:41

回答

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

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

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


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

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

+0

非常感谢ALOK! :) – 2013-05-08 08:35:18