$ 5.2.10 / 2 - "Выражение целочисленного типа, перечисления, указателя или указателя на член может быть явно преобразовано в его собственный тип; такое приведение дает значение своего операнда."
Это означает, что указатели 'bs2' и 'bs3' указывают на одно и то же местоположение
$ 9.2 / 16 -" Две структуры стандартного макета(Раздел 9) типы совместимы с макетом, если они имеют одинаковое количество элементов нестатических данных, а соответствующие элементы нестатических данных (в порядке объявления) имеют типы, совместимые с макетом (3.9). "
Это означает, что ваш класс и структура совместимы с макетом.
$ 9 / 6-
Класс стандартного макета - это класс, который:
- не имеет нестатических членов-данных типа нестандартного класса макета (или массива таких типов) или ссылки,
- не имеет виртуальных функций (10.3) и виртуальных базовых классов (10.1),
- имеет одинаковый контроль доступа (пункт 11) для всех нечлены данных atic,
- не имеют базовых классов нестандартной компоновки,
- либо не имеют нестатических элементов данных в наиболее производном классе, но не более одного базового класса с не-статические элементы данных или не имеет базовых классов с нестатическими элементами данных, а
- не имеет базовых классов того же типа, что и первый нестатический элемент данных.108
Поскольку в вашем классе есть виртуальный деструктор, ваш класс и структура не являются стандартными классами макета.
Однако вы добавили элемент данных 'void *', чтобы позаботиться о 'vptr' (таким образом возможно имитируясовместимость компоновки на основе вашей конкретной реализации компилятора)
В этом случае reinterpret_cast используется для интерпретации указателя класса (bs2) как указателя структуры (bs3).По умолчанию члены структуры являются публичными.Поскольку возвращаемое значение переинтерпретировать приведение указывает на ту же память (см. Цитату выше), где расположены члены класса, вы можете изменять члены структуры (которые совпадают с исходными членами класса).
Это обман,Это очень обескураживает.Скорее всего, это приведет к неопределенному поведению