static关键字超详细总结
admin
2024-03-19 13:23:27

static关键字(超全总结)

C语言中:

静态变量

  • 全局区域分配内存
  • 未经初始化的变量自动初始化为0
  • 静态全局变量只在声明它的整个文件可见,文件外不可见(其它文件可以继续定义被声明为static的变量相同的名字)

静态函数

  • 同静态全局变量,对其它文件不可见,其它文件可以定义相同的函数名字,不会发生冲突

C++中:

类的静态成员变量

  • 类中所有对象所共有的,只分配一次内存

  • 在全局区分配内存,不占用对象的内存,sizeof不计算静态成员变量

    #include 
    using namespace std;class A
    {
    public:
    private:int a;static int b;
    };int main(int argc, char **argv)
    {A a;cout << "sizeof a = " << sizeof(a) << endl;return 0;
    }输出: sizeof a = 4
    
  • 类的静态成员变量不能在初始化列表里初始化,也不能在声明的时候初始化,只能在类外初始化

    class A
    {
    public:A() : a(5) /* , b(2)  */ {}// error: ‘int A::b’ is a static data member; it can only be initialized at its definitionprivate:int a = 1;static int b;/*  static int b = 2;error: ISO C++ forbids in-class initialization of non-const static member ‘A::b’*/
    };int A::b = 2; // 正确
    
  • 静态成员变量属于声明的类,不属于某个对象,所以既可以采用对象方式访问,也可以采用类名加::的方式访问

    A a;
    cout << "b = " << a.b << endl;
    cout << "b = " << A::b << endl;
    
  • 静态数据成员和普通函数一样遵循public、protected、private访问规则

类的静态成员函数

  • 静态成员函数是为类服务,不是为某一个对象,在类的内部实现,属于类的一部分
  • 与普通函数相比,静态成员函数属于类本身,不属于对象,它不具有this指针,所以无法访问类内非静态的成员函数与非静态的成员变量,只能访问其它的静态成员函数与静态成员变量
  • 非静态成员函数能访问类中其它静态成员变量与静态成员函数,静态成员在类中全局共享
  • 静态成员函数还可以通过作用域限定符的方式调用

静态数据成员与全局变量对比

  • 静态成员变量没有进入程序的全局命名空间,所以不会与程序中其它全局命名冲突
  • 静态数据成员可以实现信息的隐藏,它可以是private成员,但是全局变量不可以

相关内容

热门资讯

美法官对移民与海关执法局执法权... (来源:上观新闻)央视记者当地时间16日获悉,在抗议者指控美国移民与海关执法局(ICE)广泛滥用武力...
福州“低空新势力”来啦! 福州“低空新势力”来了 低空飞行综合监管服务平台亮相,低空服务保障中心揭牌 福州市低空产业现...
一代才女黄绍兰:被老师骗婚,最... 在老家青石岭尹家河黄洼湾,曾经出过一位著名的巾帼女侠,名叫黄绍兰,她是个很了不起的人,她是国学大师章...
泰勒曼的作品有哪些?他的作品有... 听听泰勒曼写的协奏曲,如果对维瓦尔第的“四季”很熟的话(维瓦尔第有500多首协奏曲)会发现样子怎么长...
民国一代学术大家,结婚数次受世... 民国年间,涌现出了许多的大家,如我们所熟知的胡适、鲁迅、郭沫若、章太炎等人。而我们今天要说的此人也是...