static关键字超详细总结

19 篇文章 0 订阅

static关键字(超全总结)

C语言中:

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

C++中:

类的静态成员变量
  • 类中所有对象所共有的,只分配一次内存

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

    #include <iostream>
    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 definition
    
    private:
        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成员,但是全局变量不可以
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值