перешел в чат
я выполняю приведение типа Base к производному типу, но базовый тип не является экземпляром производного типа, а использует только результат, если он есть, получу ли я неопределенное поведение?
Трудно понять, о чем я спрашиваю? взгляните на этот пример:
struct Animal { int GetType(){...} };
struct Dog : Animal { bool HasLoudBark(){...}};
struct Cat : Animal { bool HasEvilStare(){...} };
Animal * a = ...;
Dog* d = static_cast<Dog*>(a);
if(a->GetType() == DogType && d->HasLoudBark())
....
В этом случаеa
может или не бытьDog
, Мы всегда делаемstatic_cast
изa
вDog * d
но мы никогда не используемd
если мы не уверены, что этоDog
.
При условии, чтоa
это неDog
Это неопределенное поведение в точке приведения? Или это определяется как мы на самом деле не используемd
если это на самом деле не являетсяDog
?
Ссылки на соответствующие части стандарта приветствуются.
(Да, я знаю, что могу использовать dynamic_cast и RTTI, и, возможно, это не очень хороший код, но меня больше интересует, допустимо ли это)