Я знаю, что C ++ не поддерживает ковариацию для элементов контейнеров, как в Java или C #. Итак, следующий код, вероятно, является неопределенным поведением:
#include
struct A {};
struct B : A {};
std::vector test;
std::vector* foo = reinterpret_cast*>(&test);
Неудивительно, что я получил отрицательные голоса, когда предлагал это решение для другого вопроса .
Но какая часть стандарта C ++ точно говорит мне, что это приведет к в неопределенном поведении? Гарантируется, что оба std :: vector
и std :: vector
сохранят свои указатели в непрерывном блоке памяти. Также гарантируется, что sizeof (A *) == sizeof (B *)
. Наконец, A * a = new B
совершенно законно.
Так каких злых духов в стандарте я вызвал (кроме стиля)?