C++ static常见用法

static使用场景:  static关键字可以修饰 局部变量、全局变量、 普通函数、成员变量,成员函数。


static修饰内容生命周期及作用域:

       1、static修饰局部变量位于函数内时,变量的生命周期并不会随着函数调用结束而终止,只有程序结束时生命周期才正常结束,但变量的作用域只能在本函数中,函数外是不可见的,如下程序会输出0 1 2 3 4 5 6 7 8 9,部分程序如下:

             int    FunA(){  static int iCnt = 0;  return iCnt++; }      

             int main(int argc, char **argv){

                     int  iExeCnt;  

                     cin >> iExecnt;

                     for(int iI=0;iI<iExeCnt;iI++){

                         cout << FunA() << endl;

                     }

                     return 0;

               }

         2、static修饰全局变量,生命周期及作用域是从定义处开始至源文件结束,其它文件该变量不可见,例如在A.cpp中定义了一个全局static 变量sVar, 那么sVar从定义处至A.cpp文件结束都是有效的,但是在其它文件B.cpp中不可见的;

         3、static修饰普通函数,生命周期及作用域于修饰全局变量一样;

         4、static修饰类数据成员,生命周期与类相同,static修饰的成员变量不属于对象组成部,是属于类组成部分,调用方式类似: 类名::数据成员名、对象.数据成员名、 对象指针->数据成员名;

         5、static修饰类成员函数,与修饰类成员数据雷同。

    

        


注意事项:static修饰类数据成员时,必须在类定义体外部进行定义(一种情况例外,如果加了const修饰),在类中用static进行声明,在定外 定义时不使用static修饰,不像普通类数据成员,static成员不是通过构造函数进行初始化,而是应该在定义 时进行 初始化的(建议:保证成员正好定义一次的最好办法就是将static数据成员的定义放在包含类非内联成员函数定义的文件中),如下所示定义静态成员 数据及静太成员函数:

                   int  A::m_call = 0;                              //在外部定义静态成员数据,不能使用static修饰

                   class A{

                       public:

                           static int m_call;                      //在类中用static进行声明

                           static const  double m_price = 10.0; //加const之后可在类中进行定义及初始化

                           static int ConnectDB(...){...};   //静态成员只能调用静态成员,不能调用非静态成员

                    }     


      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值