Skip to content

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