学习笔记-关于static关键字(c++)

1. 隐藏(避免不同文件的函数和变量命名冲突)
static 用于修饰 全局变量 : 隐藏此全局变量,使得此全局变量仅限于本文件中使用
static 用于修饰函数 : 隐藏此函数,避免同名函数,本函数也仅限于本文件中使用
2.生命周期(对于变量来说必须在程序开始运行时进行初始化,不可改变)
1.如果作为static的局部变量可以在函数内定义,它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。
2.退出该函数后, 尽管该变量还继续存在,但不能使用它。
3.static变量是默认初始化为0,其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00。
3.在类中定义(必须进行初始化)
static声明的变量和成员函数:
1.初始化时使用作用域运算符来标明它所属类;
2.静态数据成员是类的成员,而不是对象的成员;
3.对其取地址操作,变量地址是指向其数据类型的指针 ,函数地址类型是一个“nonmember函数指针”。
4.static并没有增加程序的时空开销,相反还缩短了子类对父类静态成员的访问 时间,节省了子类的内存空间。
static声明的成员函数:
1.没有this指针,仅能访问类的静态数据和静态成员函数;
2.不能被定义为虚函数;
4.初始化
静态成员初始化与一般数据成员初始化不同:
1.初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆;
2.初始化时不加该成员的访问权限控制符private,public等;
3.初始化时使用作用域运算符来标明它所属类;
所以我们得出静态数据成员初始化的格式:
<数据类型><类名>::<静态数据成员名>=<值>

ps:为了防止父类的影响,可以在子类定义一个与父类相同的静态变量,以屏蔽父类的影响。这里有一点需要注意:静态成员为父类和子类共享,重复定义了静态成员,我们的编译器采用了一种绝妙的手法:name-mangling 用以生成唯一的标志以避免错误。

文章摘录于以下地址:
https://www.cnblogs.com/songdanzju/p/7422380.html

猜你喜欢

转载自blog.csdn.net/qq_39040434/article/details/88773011
今日推荐