перешел в чат

я выполняю приведение типа 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, и, возможно, это не очень хороший код, но меня больше интересует, допустимо ли это)

Ответы на вопрос(2)

Ваш ответ на вопрос