c++类内的static变量初始化和static函数

class A
{
static int si;
static void sfunc(){cout<< si;}
};

int A::si=0;//静态成员不能在类内初始化。

使用时:int tmp=A::si

类的static member不会存在每一个具体的class object之中,而是存放在全局变量区,不论一个class有多少个具体实例,static data都只有一个。

static function

1.由于其没有隐含的this指针,所以不能够直接存取其class object中的非静态成员数据。

2.不能声明为const ,virtual。

由于static member和static function都是依赖于整个class类而非一个具体的class object,所以调用时可以直接通过class名调用而不需要具体的class object

cout<<A::si;

A::sfunc();

为什么static成员一定要在类外初始化?

这是因为被static声明的类静态数据成员,其实体远在main()函数开始之前就已经在全局数据段中诞生了!其生命期和类对象是异步的,(而且静态语意说明即使没有类实体的存在,其静态数据成员的实体也是存的)这个时候对象的生命期还没有开始,如果你要到类中去初始化类静态数据成员,让静态数据成员的初始化依赖于类的实体,,那怎么满足前述静态语意呢?难道类永远不被实例化,我们就永远不能访问到被初始化的静态数据成员吗? 所以为了满足C++的static语意,static成员一定要在类外初始化!

通常静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.

https://blog.csdn.net/shayne000/article/details/88532415
原文链接: https://www.cnblogs.com/sggggr/p/13570280.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/202028

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午9:01
下一篇 2023年2月12日 下午9:01

相关推荐