• C/C++ 中static关键字的使用


    目录

    static关键字

    📌static作用“改变生命周期” 或者 “改变作用域

    static关键字特性

    • 变量默认初始化为0

    • 保持变量内容的持久

    • 全局隐藏


    static关键字使用场景

    当用static声明函数内的局部变量时

    表示这个局部变量是在静态存储区分配的空间,在函数调用结束后其占用的存储单元并不释放,仍然保留原值

    此外,静态局部变量是在编译时赋一次初值,程序运行时每次调用函数都不再重新赋初值,而是使用前次函数调用结束时的值。

    若程序不赋初值,则编译时自动赋值0(普通局部变量不赋初值的话,其值不确定)。

    当用static声明在函数体外的全局变量时

    表示这个全局变量只能用于本文件,而不能被别的文件引用(即使使用了extern来扩展使用域),这样就能在不同文件中使用相同的全局变量名,提高了程序的通用性和可移植性。

    📌ps:全局变量和静态全局变量都存放在静态存储区中,都是在编译时分配内存,只是作用域不同(全局变量可以在其他文件中用extern扩展使用域)。

    当用static声明函数时

    表示此函数只能被本文件中的其他函数调用(称为内部函数),这样在不同文件中就可以使用相同函数名,只要用static声明即可。

    当用static声明类的成员变量时

    • static 成员变量的特点

      1. 这个类的所有对象共享一个静态成员,所以先于类的对象而存在的.

      2. 如果静态成员是公有的,那么可以直接通过类名调用.

      3. 静态成员数据在声明时候必须在类外初始化, 因为静态成员变量是先于类的对象而存在的.

    • static 成员变量的优点

      用static修饰的成员变量在对象中是不占内存的,因为他不是跟对象一起在堆或者栈中生成,

      用static修饰的变量在静态存储区生成的,所以用static修饰一方面的好处是可以节省对象的内存空间

    • static 成员变量的示例

      //通过静态成员函数来获得学生的总人数和总成绩
      #include 
      using namespace std;
      
      class Student{
      public:
          Student(char *name, int age, float score);
          void show();
      public:  //声明静态成员函数
          static int getTotal();
          static float getPoints();
      private:
          static int m_total;  //总人数
          static float m_points;  //总成绩
      private:
          char *m_name;
          int m_age;
          float m_score;
      };
      
      int Student::m_total = 0;
      float Student::m_points = 0.0;
      
      Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){
          m_total++;
          m_points += score;
      }
      void Student::show(){
          cout< show();
          (new Student("李磊", 16, 80.5)) -> show();
          (new Student("张华", 16, 99.0)) -> show();
          (new Student("王康", 14, 60.8)) -> show();
      
          int total = Student::getTotal();
          float points = Student::getPoints();
          cout<<"当前共有"<
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50

📌PS:C++中不存在静态类

  • 相关阅读:
    Python编程 字节
    python pip 安装 Crypto 不可用解决方案
    React 中 useState 清理的必须性
    3
    xsschallenge通关攻略详解
    WPF/C#:如何实现拖拉元素
    EasyUI后台管理系统
    【实用技巧】Win10搭建局域网FTP服务器
    java JVM设置
    计算机网络-物理层(数据交换方式(电报交换,报文交换,分组交换),数据报,虚电路,传输介质,物理层设备(中继器,集线器))
  • 原文地址:https://blog.csdn.net/qq_21438461/article/details/126194607