Static
Static
类的静态成员是所有对象共享的,一开始就分配了,以后固定而不会再分配空间。
静态函数不允许调用类的普通变量,只能访问类的静态变量
全局变量、静态全局变量、静态局部变量——内存的全局数据区,局部变量——栈区
-
全局变量在整个工程文件中都有效
-
静态全局变量只在定义它的文件有效
-
静态局部变量只在定义它的函数内有效,只分配一次内存,函数返回后变量不会消失。
-
全局变量和静态变量如果没有手动初始化,则编译器初始化为0,局部变量不知道
staic成员变量在类外初始化
因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这就矛盾了。
什么在类内初始化?
静态常量成员
class A
{
private:
static int count = 0; // 静态成员不能在类内初始化
};
这样也不行
class A
{
private:
const int count = 0; // 常量成员也不能在类内初始化
};
但是这样可以
class A
{
private:
static const int count = 0; // 静态整型常量成员可以在类内初始化,但是 static const float count就不行了
};
类中的static数据成员需要在类之外进行初始化
- 被类或类创建的对象共享
- 全局/静态区
静态成员函数
- 它的形参列表之中没有隐含的this指针
- 不能调用非静态的数据成员
- 不能调用非静态的成员函数
- 只能调用静态的成员
- 可以直接通过类名调用
Reference
https://blog.csdn.net/qq_16209077/article/details/52602601