为啥一个类允许拥有自己的静态成员,而不是非静态成员?
Posted
技术标签:
【中文标题】为啥一个类允许拥有自己的静态成员,而不是非静态成员?【英文标题】:Why is a class allowed to have a static member of itself, but not a non-static member?为什么一个类允许拥有自己的静态成员,而不是非静态成员? 【发布时间】:2012-01-21 00:03:34 【问题描述】:class base
public:
base a;
;
它给出了编译错误。
class base
public:
static base a;
;
而这段代码没有给出编译错误
【问题讨论】:
结构 a 静态 a b; a::b; @JohannesSchaub-litb 你让我头疼了o_O 狗哥,听说你喜欢上课…… 【参考方案1】:因为static
类成员不存储在类实例中,这就是static
可以工作的原因。
将一个对象存储在另一个相同类型的对象中会破坏运行时 - 无限大小,对吗?
sizeof
会返回什么?对象的大小需要编译器知道,但由于它包含相同类型的对象,所以没有意义。
【讨论】:
【参考方案2】:我猜错误是这样的
字段“a”的类型不完整
这是因为当不是静态时,类A
直到右大括号才完全定义。另一方面,静态成员变量在类完全定义后需要一个单独的定义步骤,这就是它们起作用的原因。
搜索声明和定义之间的区别以获得更详尽的解释。
【讨论】:
编译器不能为自己“设置提醒”以便稍后“添加”吗?有什么限制? @AssafLevy 对象的大小是多少。Base
包含一个Base
,其中包含一个Base
...
@JamesKanze:有点像两个互相面对的镜子……明白了,谢谢!以上是关于为啥一个类允许拥有自己的静态成员,而不是非静态成员?的主要内容,如果未能解决你的问题,请参考以下文章