У меня есть два класса, которые раскинуты по разным хэдэрам и сурсным файлам, при этом в каждом из них есть некоторое количество статических констант, вроде:
//a.hpp
class A {
public:
static const Koord a;
}
//b.hpp
class B {
public:
static const Koord a;
}
где Koord - это свой класс (не имеет статических констант). При этом A.a зависит от B.a и, поэтому для инициализации B.a нужно уже определенная A.a... Иначе, конечно проблема. Так вот: как и где лучше проинициализировать эти статические константы? Я вынес обе инициализации из обоих классов в один отдельный файл и все работает как надо, но выглядит не камильфо, когда в одном файле происходит такое:
const Koord B::a = 1;
const Koord A::a = B::a + 1;
Если глобальная переменная (пусть и const) зависит от другой глобальной, то они как минимум должны быть определены в одной единице трансляции. Иначе, может возникнуть ситуация, именуемая static initialization order fiasco. Т.к. языком не гарантируется порядка инициализации глобальных переменных между разными единицами трансляциями. Пока всё живёт в одном файле проблем быть не должно.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей