关于c++静态的一些浅理解
**
目前为止我所知道的静态包括静态成员变量和静态成员函数两种。
二者都是在返回值类型前面添加static关键字,都可以通过类名直接访问。
对于静态成员变量,其分为全局静态变量和局部静态变量,二者都位于静态存储区。在类内定义静态成员变量时,不可以在类内初始化,为什么呢?
我的理解是,静态成员变量属于整个类,而不是某一个对象,如果对其进行初始化,那么每个对象都将初始化一次,这是矛盾的,且对于静态成员变量来说,它只规定应该被初始化一次的,再者若是类内初始化,每个对象都初始化一次,而各个对象有共享一个静态变量,那么将会出现所有对象的此成员的数据发生改变的错误,故而应该在类外初始化,《c++primer》里面也说在类外定义和初始化是保证static成员变量只被定义一次的好方法。那么在类外该如何初始化呢?方法为:返回值类型 类名::变量名=具体值;
静态成员变量也存在权限,遵循三个访问原则。
静态成员变量在编译时就分配了内存。
类外可以通过类名加作用域直接访问。
对于静态成员函数,它可以访问静态成员变量和静态成员函数,但不可以访问非静态变量和非静态函数,而非静态函数可以访问非静态变量非静态函数和静态变量静态函数。它也可以通过类名加作用域的方式进行访问。
为什么不能访问非静态成员变量呢?我的理解是静态成员函数是一个共享的在整个程序运行期间只存在一个的,而对于非静态成员变量,它只能通过创建一个对象才能被访问,这就导致编译器无法判断到底是哪个对象要来访问,因为它是被共享的,或者说某一个对象访问,并且改变了数据,那么每一对象的该变量都会被改变,这是没必要的也是会出现错误的,我的理解是这样可能有些不对,仅供参考。
在静态成员函数中可以定义静态成员变量并且可以进行初始化,属于函数体内的一个局部静态变量。
本文地址:https://blog.csdn.net/bananapencil/article/details/111876841