У меня есть кусок кода структурированную, как это:Когда создаются глобальные переменные?
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;
}
Теперь это выбрасывает Segfault, Valgrind говорит, что карта еще не была создана. Как это работает, как мне его изменить?
Глобальные переменные внутри каждой единицы трансляции строятся в порядке их декларации. Порядок ** между ** единицами перевода, действительно, не указан. –
Их даже не нужно «строить» (динамически инициализировать) перед вводом 'main', см. [Basic.start.init]/4.Чтобы добавить дополнительное усложнение, элемент статических данных не явно специализированных шаблонов классов имеет неупорядоченную инициализацию, все остальное имеет упорядоченную инициализацию (внутри TU). – dyp