【问题标题】:C++ static members in class类中的 C++ 静态成员
【发布时间】:2009-10-28 21:42:34
【问题描述】:

是否可以在不首先创建该类的实例的情况下访问和使用类中的静态成员?即将班级视为某种全球性的垃圾场

詹姆斯

【问题讨论】:

    标签: c++ static members


    【解决方案1】:

    是的,这正是static 对班级成员的意义:

    struct Foo {
        static int x;
    };
    
    int Foo::x;
    
    int main() {
        Foo::x = 123;
    }
    

    【讨论】:

    【解决方案2】:

    另一方面,这就是命名空间的用途:

    namespace toolbox
    {
      void fun1();
      void fun2();
    }
    

    静态函数类的唯一用途是策略类。

    【讨论】:

      【解决方案3】:

      简而言之,是的。

      总而言之,静态成员可以在任何地方调用,只需将类名视为命名空间即可。

      class Something
      {
         static int a;
      };
      
      // Somewhere in the code
      cout << Something::a;
      

      【讨论】:

      • 您只能在语法上下文中将类名视为命名空间,而不能以任何其他方式。
      【解决方案4】:

      是的:

      class mytoolbox
      {
      public:
        static void fun1()
        {
          //
        }
      
        static void fun2()
        {
          //
        }
        static int number = 0;
      };
      ...
      int main()
      {
        mytoolbox::fun1();
        mytoolbox::number = 3;
        ...
      }
      

      【讨论】:

        【解决方案5】:

        您也可以通过空指针调用静态方法。下面的代码可以工作,但请不要使用它:)

        struct Foo
        {
            static int boo() { return 2; }
        };
        
        int _tmain(int argc, _TCHAR* argv[])
        {
            Foo* pFoo = NULL;
            int b = pFoo->boo(); // b will now have the value 2
            return 0;
        }
        

        【讨论】:

        • 从技术上讲,这是未定义的行为。您不能出于任何原因尊重空指针。对空指针唯一可以做的事情是 a) 为它分配另一个指针 b) 将它与另一个指针进行比较。
        • 在访问成员的情况下,this/pFoo 指针将被取消引用。静态函数不访问成员,也没有成员。即使是非虚拟方法也可以毫无例外地通过空指针调用。它们仅在访问成员时崩溃。任何人都应该知道并接受这一点,以便发现一些奇怪的错误。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多