繁体   English   中英

基类成员函数内部的静态变量

[英]static variable inside member function of base class

我有以下内容:

   class base
   {
      public
       void f();
       ...
   }
    void base::f()
    {
        static bool indicator=false;
         .....
         if(!indicator)
         {
            ...
            indicator=true;
          }
     }
    class D:public base
    {      
       ...
     }

在我的main()中,我有:

      main()
      {
          // first instance of D
          base *d1 = new D();
          d1->f();
           ....
           // 2nd instance of D
          base *d2 = new D();
          d2->f();
       }

我发现我第一次实例化D并调用d1-> f()时,静态变量设置为false。 但是第二次我调用d2-> f()时,代码甚至都没有碰到“ static bool indicator = false;”这一行。 并且它保持真实(从d1-f()的第一遍开始)这正是我想要的行为,但是我不明白为什么会这样。 有人可以解释发生了什么吗? 提前致谢

在成员函数中声明的静态变量将在函数调用之间保留其值 所有实例将只有一个副本 ,并且来自不同实例的所有对indicator访问将影响同一indicator 这意味着indicator 将只初始化一次

有关更多信息,请参见此处: 成员函数中的静态变量

同样,此代码也不会切换indicator ,如果它为假,它总是将其设置为true(我确定这是您想要的行为)。

if(!indicator)
     {
        ...
        indicator=true;
      }

这恰好是在功能块内部声明的静态变量的行为。 自从在C编程语言中引入该功能以来,就一直如此。

静态声明也可以应用于内部变量。 就像自动变量一样,内部静态变量在特定函数中是局部的,但是与自动变量不同,内部静态变量仍然存在,而不是每次激活该函数时都会出现。 (K&R,第61页)。

静态初始化程序在包含函数的第一次调用之前执行。 由于是静态变量,因此变量在调用中将保留其最后一个状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM