https://godbolt.org/z/jKEr88ndj
Это UB или это нормально?
Каст работает всегда. Вы одни байты пытаетесь обрабатывать как другие. Если вы катсутете одинаковые типы работать будет правильно, если неправильные типы, работать будет неправильно.
С поправкой на оптимизации компилятора. Даже тут, мне кажется, бывают кейсы когда компилятор начинает отдельно оптимизировать std::vector<Derived*> и std::vector<Base*> из-за чего у них начинают различаться мемори лейауты.
Ну, т.е. компилятор, насколько я понимаю, не гарантирует одинаковые опитимизации при формально одинаковых типах в разных участках кода.
Так глубоко не копал, но думаю так и есть. Компилятор гарантирует только очередность полей, но не выравнивание
Это UB
Не всматривался, но в твоём случае можно сделать static_cast
Обсуждают сегодня