c++ - 全局静态指针多次初始化的用法?

标签 c++ static global-variables

我在 main.cpp 文件的 main 函数外声明了一个全局静态指针。我是否需要在使用它的每个 cpp 文件中对其进行初始化?

// main.cpp
...
static int *levels;
...
int main()
...

那么,如果我必须在其他一些文件而不是main.cpp中初始化它,那么全局静态变量的用法是什么?我可以在每个 cpp 文件中声明单独的指针。

最佳答案

这取决于你什么时候需要初始化它。

如果有其他静态对象需要它:

static int * levels = new int[COMPILE_TIME_CONST];

是一个好的开始。请注意,单个编译单元中的静态变量按照它们在源代码中出现的顺序进行初始化。其他编译单元中与静态相关的初始化顺序是一个复杂得多的问题。

Definition: compilation unit is a single cpp file 
and the headers it includes directly or indirectly.

幸运的是,您无法从任何其他编译单元访问级别。 [根据评论编辑]

如果在 main 开始之前不需要它,那么:

int main()
{
    levels = new int[someValueCalculatedInMain];
|

有效。

关于c++ - 全局静态指针多次初始化的用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23301727/

相关文章:

将预处理器变量更改为运行时因变量

Python线程不会更改函数内的全局变量

c++ - C++ 中不寻常的 typedef 使用

c++ - 编译Template类时出现数百个错误(第一个Template类)

c++ - C 或 C++ 链接器中是否有任何类型检查?

c# - 默认情况下委托(delegate)是静态的吗?

python - 导入声明全局变量的函数

C++ bool std::operator < 带有键 std::unordered_set<int,std::hash<int>> 的映射错误

java - 使用 ClassName.method() 时,Compiler、Static 或实例方法首先查看哪个方法?

python - GAE Python : Static Files not loading in localhost,,但当应用程序部署到 appspot 时加载完全正常