c++ 类的静态数据成员为什么不能在类内定义
展开全部
1、根据primer第4版的解释,static局部对象必须遵守【确保不迟于在程序执行流程第一次经过该对象的定义语句时进行初始化】的这一个原则。
2、同时,我们知道类内部的执行顺序并不是按行次序执行的,而是按对象调用执行的。
3、以上两者决定了一个问题:如果在类内定义,那么不建立对象时,静态数据成员无法初始化,或初始化时间太迟。【可能原因之一】
4、再者,静态成员的生命周期是,一经建立便会存在与整个程序的生命周期内。而静态数据成员即属于类、也不属于类的原因便在此,在类内定义,会使其完全成为该类中的成员,也就是说,当建立复数个该类对象时,会再次声明并定义这个变量的位置,且名字空间和作用域相同下,导致重名问题。【可能原因之二】
5、因此static的成员需要独立于类作定义。
6、其实并没有必要知道这一个规则是如何由编译器实现的。因为只是记下一个话而已。
2、同时,我们知道类内部的执行顺序并不是按行次序执行的,而是按对象调用执行的。
3、以上两者决定了一个问题:如果在类内定义,那么不建立对象时,静态数据成员无法初始化,或初始化时间太迟。【可能原因之一】
4、再者,静态成员的生命周期是,一经建立便会存在与整个程序的生命周期内。而静态数据成员即属于类、也不属于类的原因便在此,在类内定义,会使其完全成为该类中的成员,也就是说,当建立复数个该类对象时,会再次声明并定义这个变量的位置,且名字空间和作用域相同下,导致重名问题。【可能原因之二】
5、因此static的成员需要独立于类作定义。
6、其实并没有必要知道这一个规则是如何由编译器实现的。因为只是记下一个话而已。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询