C ++ заставляет программиста определять непостоянный статический член вне класса, и причина этого, которую я постоянно вижу, состоит в том, что если статический член был определен внутри класса,
это приведет к нескольким определениям статического члена. Я понимаю, что имея
несколько определений для статического члена это плохо, но я не понимаю, где эти несколько
определения бы даже пришли. Не должен инициализировать непостоянный статический член
просто зайдите в раздел данных и это будет единственное определение?
struct Student {
static int x = 4; // Why would this result in multiple definitions?
};
Кроме того, я прочитал в этом другом посте stackoverflow, что постоянные статические члены просто встроены в код, где бы он ни использовался:
Почему я не могу иметь в классе нецелый статический член const?
Это обрабатывается препроцессором вместе со всеми другими директивами? (Я спрошу это в другом посте, если это необходимо, но я
не был уверен, стоит ли это отдельного поста).
Это произойдет потому, что / когда ваш заголовок будет включен в несколько «блоков перевода» (например, файлы .cpp).
Затем каждый TU будет содержать копию определения.
Во время ссылки они будут конфликтовать. (Компоновщик связи объекты из каждой единицы перевода)
Других решений пока нет …