静态结构 - 定义,对象,成员

时间:2013-08-18 18:57:12

标签: c++ static struct structure

1.连接以外的静态结构有什么用?

static struct test //THIS ONE
{
  int a;
};

2.像这样使用静态的用途是什么?当我创建它并尝试使用静态成员(通过结构对象)时,它显示“未定义的引用`test :: a'”

struct test
{
  static int a; //THIS ONE
};

3。创建静态结构对象有什么用?

struct test{
  int a;
};

int main()
{
  static test inst; //THIS ONE
  return 0;
}

1 个答案:

答案 0 :(得分:5)

  1. 它只是特定于链接 - 它会使您的test结构具有内部链接(仅在当前文件中可见)。 编辑:这仅适用于函数和变量声明 - 不适用于类型定义。

    //A.cpp
    static int localVar = 0;
    
    void foo(){ localVar = 1; /* Ok, it's in the same file */ }
    
    //B.cpp
    extern int localVar;
    void bar(){ 
    /* 
       Undefined reference - linker can't see
       localVar defined as static in other file. 
    */
       localVar = 2; 
    }
    
  2. 这是一个静态字段。如果在struct static中声明一些字段,那么它将是该结构的所有实例的共享数据成员。

     struct test
     {
         static int a;
     };
    
    
     // Now, all your test::a variables will point to the same memory location.
     // Because of that, we need to define it somewhere in order to reserve that 
     // memory space!
     int test::a;
    
     int foo()
     {
         test t1, t2;
         t1.a = 5;
         test::a = 6;
         std::cout << t2.a << std::endl; // It will print 6.
     }
    
  3. 这是静态局部变量。这不会存储在调用堆栈上,而是存储在全局区域中,因此对同一函数的所有调用都将共享相同的inst变量。

       void foo()
       {
            static int i = 0;
            i++;
            std::cout << i << std::endl;
       }
    
       int main()
       {
           foo();  // Prints 1
           foo();  // Prints 2
           foo();  // Prints 3
           return 0;
       }