Почему static_cast используется в официальном документе QT - PullRequest
2 голосов
/ 27 февраля 2020

https://doc.qt.io/qt-5/eventsandfilters.html

В официальном документе QT static_cast используется в коде, подобном

QKeyEvent *ke = static_cast<QKeyEvent *>(event);
...
MyCustomEvent *myEvent = static_cast<MyCustomEvent *>(event);

Однако по моему опыту следует использовать dynamic_cast, так как это приведение от базы к производной. Есть ли особая причина для использования static_cast?

Ответы [ 2 ]

3 голосов
/ 27 февраля 2020

Код, который вы видите в документации Qt, действителен. Использование static_cast может использоваться и заменяет dynamic_cast только в том случае, если вы точно знаете, что указатель, который вы хотите привести от точек к объекту класса, к которому вы хотите привести. В своем вопросе вы опускаете очень важные детали. Перед выполнением static_cast проверяется тип:

if (event->type() == MyCustomEventType) {...}
3 голосов
/ 27 февраля 2020

Совершенно нормально использовать static_cast, если вы абсолютно уверены, что соответствующий dynamic_cast будет успешным. Использование static_cast быстрее, чем dynamic_cast, так как не требует проверок во время выполнения.

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