Как работает reinterpret_cast?
struct foo {
int a = 1;
};
struct bar {
int b = 2;
};
struct baz : foo, bar {
int c = 3;
};
int main() {
baz oBaz;
auto s_cast = static_cast<foo*>(&oBaz);
auto r_cast = reinterpret_cast<bar*>(&oBaz);
std::cout << s_cast->a << std::endl;
std::cout << r_cast->b << std::endl;
}
Как в данном случае работает reinterpret_cast? Почему на консоли я вижу 1, 1?
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Потому что при этом приведении никакое наследование никак не используется. Просто кусок памяти объявляется содержащим то baz, то bar — один и тот же кусок, заметим.
Из-за конкретного размещения baz в памяти (начиная с foo) и поскольку вся структура bar из одного числа, это число в памяти от foo и выступает то в роли baz.a, то bar.b.
Никакой гарантии именно такого размещения нет, как сказал user7860670, это неопределенное поведение.