Вы можете взглянуть на это с двух точек зрения.
Перспектива C ++:
Объединение - это, в первую очередь, класс.У него есть цель, отличная от класса, но она определяется тем, что есть класс.
Объединение - это класс, для которого только один из его подобъектов активен в любом одном типе.С этой целью он меняет работу дочерних подобъектов союзов.Это также является частью того, почему профсоюзы не могут иметь субобъектов base class .
Статические члены-данные не являются подобъектами-членами, поэтому их расположение в объединении не должно отличаться от их расположения вне объединяющий класс.
Более того, статические члены типов в C ++ на самом деле являются просто механизмом видимости для имен функций и объектов.Они по-прежнему эффективно глобальны, но они могут быть частными и скрытыми, и для их использования они должны иметь префикс по их типу.
Это не имеет смысла для членов статических данныхобъединение, которое будет вести себя иначе, чем члены статических данных класса.
Перспектива C ++ - должна быть совместима с-C:
В C существуют объединения, поэтому C ++ должен иметьих тоже.Но союзы сложно определить в объектной модели C ++, с ними трудно работать и многое другое.Таким образом, вы можете думать о профсоюзах, как о том, что нужно С ++, но не стоит иметь с ним дело.Итак, как вы справляетесь с ними?
Вы заставляете профсоюзы работать как С, когда имеете дело с тем, как работают профсоюзы С.В C нет такого понятия, как статический член, поэтому нет кода на C, который ожидает объединения статических членов объединения.Поэтому ... не объединяйте их.Если пользователю действительно нужен статический член, представляющий собой объединение некоторого набора типов, он может легко создать объединение и создать один статический член этого типа.
Таким образом, пользователь не теряет никакой выразительной силыделая различные статические элементы.