Какую технику приведения лучше использовать для приведения из высшего в низший класс в C ++? - PullRequest
2 голосов
/ 03 мая 2010

Я хочу привести из указателя верхнего класса в нижний класс, т.е. из указателя базового класса в указатель производного класса.

Должен ли я использовать "Dynamic_cast" или "reinterpret_cast"? пожалуйста, посоветуйте мне

Ответы [ 4 ]

11 голосов
/ 03 мая 2010

Не используйте reinterpret_cast - либо используйте static_cast, либо dynamic_cast. Если вы уверены, что указатель относится именно к этому объекту производного класса, используйте static_cast, в противном случае используйте dynamic_cast (что потребует полиморфности базового класса) и проверьте результат, чтобы убедиться, что указатель действительно относится к классу. ты хочешь.

7 голосов
/ 03 мая 2010

Это зависит от того, что вы знаете об указателе.

Если вы знаете, уверен , что у вас есть указатель дочернего типа, вы можете static_cast<> его безопасно.

Если вы не знаете наверняка, просто наберите dynamic_cast<>, но это требует затрат и медленнее.

2 голосов
/ 03 мая 2010

reinterpret_cast <> является последним средством, и его следует избегать.

В Qt, если приведение между QObjects, используйте qobject_cast <>. Это семантически похоже на dynamic_cast, но не имеет проблем с границами dll и т. Д.

0 голосов
/ 03 мая 2010

Добавление к ответу Ereon: И если вы не знаете тип, используйте dynamic_cast для проверки типа во время выполнения, перехватив исключение bad_cast.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...