为什么允许类具有自身的静态成员,而不是非静态成员?

时间:2011-12-15 09:11:36

标签: c++ object static-members

class base {
public:
    base a;
};

它会出现编译错误。

class base {
public:
    static base a;
};

虽然此代码不会出现编译错误

2 个答案:

答案 0 :(得分:41)

由于static类成员未存储在类实例中,这就是static可以工作的原因。

将对象存储在同一类型的另一个对象中会破坏运行时 - 无限大小,对吗?

sizeof会返回什么?对象的大小需要由编译器知道,但由于它包含相同类型的对象,因此没有意义。

答案 1 :(得分:6)

我猜这个错误就像是

  

字段'a'的类型不完整

这是因为当不是静态时,类A直到结束括号才完全定义。另一方面,静态成员变量在完全定义类之后需要单独的定义步骤,这就是它们工作的原因。

搜索声明定义之间的区别,以获得更全面的解释。