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

use*_*379 26 c++ object static-members

class base {
public:
    base a;
};
Run Code Online (Sandbox Code Playgroud)

它给出了编译错误.

class base {
public:
    static base a;
};
Run Code Online (Sandbox Code Playgroud)

而这段代码不会给出编译错误

Luc*_*ore 41

因为static类成员没有存储在类实例中,所以这就是为什么它static会起作用.

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

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


Som*_*ude 6

我猜这个错误是这样的

字段'a'具有不完整的类型

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

搜索声明定义之间的区别以获得更详尽的解释.

  • @JamesKanze:面对彼此的两面镜子......明白了,谢谢! (3认同)
  • @AssafLevy对象的大小是多少.`Base`包含一个`Base`,其中包含一个`Base` ... (2认同)