Поскольку вы говорите, что структура содержит целые числа и шорты, я собираюсь пойти дальше и ответить на вопрос, что это объединение - POD. Если это так, то вы получите 9,5 / 1:
одна специальная гарантия сделана в
Для того чтобы упростить использование союзов:
Если POD-союз содержит несколько
POD-структуры, которые имеют общий
начальная последовательность (9.2), и если
объект этого типа POD-union содержит
одна из POD-структур, это
разрешено проверять общее
начальная последовательность любой из POD-структур
Участники
Итак, если ваша структура выглядит следующим образом:
struct Foo1 { UInt32 a; other stuff; };
struct Foo2 { UInt32 b; other stuff; };
...
struct Foo15 { UInt32 o; other stuff; };
struct Bar { UInt16 p; other stuff; };
// some kind of packing pragma
struct Baz {
char is_it_Foo;
char something_else;
union {
Foo1 f1;
Foo2 f2;
...
Foo15 f15;
Bar b;
} u;
};
Тогда вы можете сделать это:
Baz *baz = whatever;
if (baz->is_it_Foo) {
UInt32 n = baz->u.f1.a;
}
Если члены объединения не являются POD, тогда ваш reinterpret_cast
все равно не работает, поскольку больше нет никакой гарантии, что первый элемент данных структуры расположен по смещению 0 от начала структуры.