C++ : static关键字

本文详细解析了C及C++语言中static关键字的多种用途,包括其在函数定义、变量声明、类的静态数据成员及静态成员函数中的不同含义与应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        自C语言以来,static就是个容易让人迷惑的关键字,因为根据使用场合的不同,它表示两种差别甚远的意义。

        《C和指针》一书给出精要的解释:

  • 用于函数定义,或者用于代码块之外的变量声明
        表示修改标识符的链接属性,从external改为internal。但标识符的存储类型和作用域不受影响。用这种方式声明的函数或变量只能在声明它们的源文件中访问。
  • 当static用于代码块内部的变量声明时
        表示修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响。用这种方式声明的变量在程序执行之前创建,并在程序的整个执行期间一直存在;而不是每次在代码块开始执行时创建,在代码块执行完毕后销毁。

        在C++中,static又多了两种使用场合:

  • 定义类的静态数据成员
        表示该成员属于这个类,而不是某个具体的对象。为这个类的所有对象开辟了一块共享的内存区域,从而为该类的所有对象提供了一种通信的方法,并且隐藏在类的内部,避免了全局变量的缺陷:能被任何人修改,容易造成名字冲突。

        静态数据成员必须定义在类的外部(不允许内联)而且只能定义一次。因此它通常放在一个类实现文件中。变量定义时才会分配存储区域,如果一个静态数据成员只在类定义中有声明,却没有定义,连接器将报错。

  • 定义类的静态成员函数
        表示该成员属于这个类,而不是某个具体的对象。

        通常,当前对象的地址(this)是隐式地传递到被调用函数的,但static成员函数不和具体对象相关,没有this指针,也就无法找到对象中的非静态成员。在static成员函数中只能访问静态数据成员,也只能调用其它的静态成员函数。并且,对一个static成员函数的所有调用者来说,static成员函数中定义的局部变量都只有一份拷贝。

        static成员函数不能被声明为const。因为static成员不是任何对象的组成部分,而将成员函数声明为const表示不会修改该函数所属的对象。

        static成员函数不能被声明为虚函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值