最近读代码的时候发现有这种编码方式class CA
{
public:
    static int Calc(int a, int b);    static int a;
    static int b;
};int CA::Calc(int a, int b)
{
    return a + b;
}
调用的时候:void FuncShit()
{
    CA::a = 1;
    CA::b = 2;
    int answer = CA::Calc(CA::a, CA::b);
}
我就不解了,如果说用void Func()
{
    CA* p = new CA();
    p->a = 1;
    p->b = 2;
    int answer = p->Calc(p->a, p->b);
}这样的方式我能够理解,毕竟CA是经过实例化的,成员变量也有分配内存什么的,
可是光是使用::符号,如何理解呢?

解决方案 »

  1.   

    静态的由于对应于类,不对应于对象,所以说只有一份。
    既然只有一份,那么就可以预先分配出来(编译的时候),那么用的时候,由于已经分配,自然就不需要new了。
      

  2.   

    恩 谢谢各位大神的回复我的问题其实是这样的,
    类中的成员 由于是静态 所以就是全局的,因此就只有一份,可是这个CA的存在方式呢?
    肯定有一块内存区域吧?这块内存对所有调用者都是同一份么?
    绝个例子吧,
    调用CA::xxxx的时候,如果是来自a.cpp和b.cpp两个文件,这个CA是不是同一个呢?还是没一个文件各自拥有一块CA内存块副本啊?
      

  3.   

    静态是以类为单位的,不是按cpp为单位的(可见范围才是按cpp为单位的)。
    静态数据存放在exe的静态数据区。
      

  4.   

    CA都是一个,因为同一个域内class不能重名