Касты при наследовании в C++: читаем стандарт

Почитаешь со мной новый working draft, %username%?

Почитаешь со мной новый working draft, %username%?

Мне очень понравилось, как элегантно стандарт описывает преобразования между базовыми и производными типами. По мне, это даже нагляднее, чем в большинстве популярных статей об этом (и тем более непопулярных, которые рассматривают неочевидные моменты очень развёрнуто). Давайте посмотрим на это поближе.

В этой статье я буду пользоваться 20 м стандартом. B значит вендетта base, D — derived.

Начнём с каста вверх: 7.3.11 Pointer conversions, пункт 3. Это standard conversion.

D -> B» /></p>

<p>D → B </p>

<p><em>The result of the conversion is a pointer to the base class subobject of the derived class object.</em> И никаких картинок не надо — сразу ясно, как будет происходить этот самый slice (он же срез — устоявшееся название для сдвига указателя при касте вверх). Указатель просто сдвигается на базовый подобъект производного класса. А если вариантов несколько, то и указатель некуда двигать. </p>

<p>Каст вниз — самое неочевидное, на мой взгляд. 7.6.1.8 Static cast, пункт 2.</p>

<p><img src=© Habrahabr.ru