我有一个工作代码库,其中有一个名为 Tabs 的类。这个类的所有方法和变量都被定义为静态的。我知道类的静态成员由该类对象的所有实例共享。此类用于将某种类型的数据存储为集合。许多不同的文件使用成员函数 Tabs::find() 和 Tabs::Insert() 却从未实例化类 Tabs 的对象。我试图了解它是如何工作的以及这种编程技术被称为什么。谢谢。
问问题
101 次
2 回答
4
static
数据成员在main
进入之前被初始化,这就是访问它们的原因。它们驻留在静态内存中,而不是动态或自动的。
只有静态成员的类类似于具有全局变量和函数,但组合在一起。它本身不是一种编程技术。这只是全局变量。
//globals.h
class Globals
{
static int x;
public:
static int getX() {return x;}
};
//globals.cpp
#include "Globals.h"
int Globals::x = 1;
//main.cpp
#include "Globals.h"
//x is initialized before call to main
int main()
{
int x = Globals::getX();
}
于 2012-05-03T18:10:53.107 回答
2
我称之为“过时的”。它本质上是使用 a class
(或struct
,视情况而定)来模拟 a namespace
。
class whatever {
static int a, b, c;
static double x, y, z;
};
int whatever::a, whatever::b, whatever::c;
double whatever::x, whatever::y, whatever::z;
与以下内容几乎相同:
namespace whatever {
int a, b, c;
double x, y, z;
}
您可能只是在处理namespace
添加到该语言之前的代码。如果它不是那么旧,那么作者可能是,或者可能有一些意图保持对某些不支持namespace
(正确)的编译器的可移植性。
In any case, what you have are global variables with qualified names. Even though they're inside a class
/struct
, the static
means they have static lifetime, so being a struct affects only the name, not things like initialization or destruction.
于 2012-05-03T18:23:36.243 回答