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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Почитаешь со мной новый working draft, %username%?
Почитаешь со мной новый working draft, %username%?

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

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

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

D -> B
D -> B

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

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

B -> D
B -> D

Но стандарт и это объясняет парой фраз. В самом деле, если мы пытаемся сделать целое из части, то результат определён лишь в случае, когда целое уже существует. Почему при этом не удаётся создать D из виртуального B? Потому что B не принадлежит ни одному целому. Даже low-level абстракции не понадобились.

Все эти простые вещи спустя лекции и гугл дошли до меня только через стандарт. Он ответил на много тупых вопросов. Непонятно, почему его не рекомендуют новичкам.

Надеюсь, и вы прониклись лаконичностью оригинала C++. Так или иначе, этот случай мотивировал меня пересмотреть своё отношение к источникам информации. Вэлком в комменты :)

P.S. Изначально я хотела сделать пост, но там можно только 1 картинку. Поэтому стиль и формат получились соответствующие. Нравятся ли вам подобные вольные маленькие статьи?

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Используете ли вы стандарт?
12.5% Нет 1
37.5% Очень редко 3
50% Редко 4
0% Часто 0
0% Время от времени 0
Проголосовали 8 пользователей. Воздержавшихся нет.
Источник: https://habr.com/ru/articles/766436/


Интересные статьи

Интересные статьи

Картинка: Valentinlacoste, Freepik На днях меня посетила любопытная мысль: а что, если 3D-принтер использовать необычным образом, а именно для нанесения разных надписей, изображений и логотипов пря...
Привет. Меня зовут Николай, я QA Automation Engineer в мобильной платформенной команде Delivery Club. Эта статья будет о том, как мы интегрировали Allure TestOps (далее Allure TO) в регрессионное тест...
При построении сети для общения между большим количеством устройств, можно задуматься: а какой интерфейс выбрать? У каждого интерфейса есть свои плюсы и минусы, которые определяют их пр...
ClickHouse — open-source DBMS от Яндекса — традиционно используется для аналитики различного рода логов или потоков событий от онлайн-систем. Однако, гибкость ClickHouse позволяет п...
Мир, окружающий нас, является совместным результатом множества явлений и процессов из самых разных наук, выделить самую главную из которых фактически невозможно. Несмотря на некоторую степень...