Size: a a a

2021 February 26

NM

Nastya Medveda in supapro.cxx
Liber Azerate
Компилятор бы не ругался, не будь это каст с проверкой. Но даже без проверки это UB
А вот если я то же самое оберну в класс и сделаю dynamic_cast, то это сработает?
источник

ID

In Dev in supapro.cxx
Nastya Medveda
А вот если я то же самое оберну в класс и сделаю dynamic_cast, то это сработает?
dynamic_cast только для кастов вверх/вниз по иерархии
источник

LA

Liber Azerate in supapro.cxx
Nastya Medveda
А вот если я то же самое оберну в класс и сделаю dynamic_cast, то это сработает?
dynamic_cast имеет не то предназначение. Он имеет предназначение перемещения по полиморфной иерархии. Если в базовом класе будет инт, например, а в наследнике будет поле с даблом, ну и это будут полиморфные классы, то сработает
источник

LA

Liber Azerate in supapro.cxx
In Dev
dynamic_cast только для кастов вверх/вниз по иерархии
Бывают ещё side касты и кросс касты
источник

П

Пашечка in supapro.cxx
Nastya Medveda
А вот если я то же самое оберну в класс и сделаю dynamic_cast, то это сработает?
Стопстопстоп, не путайте теплое с мягким.

Во-первых, динамик каст тоже каст с проверкой. Только проверка в рантайме. А статик каст проверяет на этапе компиляции.
Во-вторых, он используется, в основном, для преобразования от родителя к наследнику (или наоборот, но там и статик так-то работает)
источник

ID

In Dev in supapro.cxx
Liber Azerate
Бывают ещё side касты и кросс касты
Это как?
источник

NM

Nastya Medveda in supapro.cxx
Liber Azerate
dynamic_cast имеет не то предназначение. Он имеет предназначение перемещения по полиморфной иерархии. Если в базовом класе будет инт, например, а в наследнике будет поле с даблом, ну и это будут полиморфные классы, то сработает
ТО есть изменить тип указателя с int  на double  я не могу, но если я  оберну обе переменных в классы и унаследую один класс от другого, то никаких проблем...
Логичный подход. не придерешься.
источник

LA

Liber Azerate in supapro.cxx
In Dev
Это как?
Легче загуглить, я тут не нарисую. Но к примеру, у класса два интерфейса, а мы из левого кастуем в правый
источник

ID

In Dev in supapro.cxx
Liber Azerate
Легче загуглить, я тут не нарисую. Но к примеру, у класса два интерфейса, а мы из левого кастуем в правый
Множественное наследование?
источник

LA

Liber Azerate in supapro.cxx
Nastya Medveda
ТО есть изменить тип указателя с int  на double  я не могу, но если я  оберну обе переменных в классы и унаследую один класс от другого, то никаких проблем...
Логичный подход. не придерешься.
Да, и в классе наследнике будет поле с указателем на инт и с указателем на дабл
источник

LA

Liber Azerate in supapro.cxx
In Dev
Множественное наследование?
Интерфейсов
источник

П

Пашечка in supapro.cxx
Liber Azerate
Легче загуглить, я тут не нарисую. Но к примеру, у класса два интерфейса, а мы из левого кастуем в правый
Это уже надо самописные касты, нет? Динамик не даст так сделать?
источник

LA

Liber Azerate in supapro.cxx
Пашечка
Это уже надо самописные касты, нет? Динамик не даст так сделать?
Даст, это легально
источник

NM

Nastya Medveda in supapro.cxx
Liber Azerate
Да, и в классе наследнике будет поле с указателем на инт и с указателем на дабл
Брократия в программировании!
источник

RM

Roy Mustang in supapro.cxx
Пашечка
Потому что изначально вы положили в коробку котенка, а теперь говорите компилятору, что там сидит щенок) Вот компилятор и ругается
А если у нее коробка с дырявым дном и она котенка на щенка поменяла?
источник

ID

In Dev in supapro.cxx
Liber Azerate
Интерфейсов
Что-то вроде такого?

struct C : A, B {}

A * a = new C();
B * b = dynamic_cast<B*>(a);
источник

П

Пашечка in supapro.cxx
А, понял, пардон, затупил. Когда мы наследника сначала кастанули к левому родителю, а потом оттуда к правому родителю, тогда да, даст.
источник

LA

Liber Azerate in supapro.cxx
In Dev
Что-то вроде такого?

struct C : A, B {}

A * a = new C();
B * b = dynamic_cast<B*>(a);
Да
источник

П

Пашечка in supapro.cxx
Roy Mustang
А если у нее коробка с дырявым дном и она котенка на щенка поменяла?
Это UB :)
источник

ЕП

Евгений Попов... in supapro.cxx
Можно хак заюзать
источник