我有一段代码结构如下:
a.cpp:
#include "b.hpp"
const unsigned a = create(1);
b.cpp:
map<int, string> something; // global variable
unsigned create(unsigned a){
something.insert(make_pair(a, "somestring"));
return a;
}
现在,这抛出一个段错误,valgrind 说 map 还没有创建。它是如何工作的,我应该如何改变它?
最佳答案
C++ 没有定义在程序启动期间构造全局变量的顺序。 a
可以在 something
构造之前先初始化,这将导致上述问题。当您开始构建依赖于正在初始化的其他全局变量的全局变量时,您就会遇到经典的静态初始化顺序失败。
解决上述情况的一种简单方法是使 something
静态化并将其移动到您的 create
函数中。
unsigned create(unsigned a)
{
static map<int, string> something;
something.insert(make_pair(a, "somestring"));
return a;
}
这将保证在第一次调用 create
时创建 something
。
关于c++ - 什么时候创建全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19618801/