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;
}
答案 0 :(得分:5)
它只是特定于链接 - 它会使您的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;
}
这是一个静态字段。如果在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.
}
这是静态局部变量。这不会存储在调用堆栈上,而是存储在全局区域中,因此对同一函数的所有调用都将共享相同的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;
}