Нет, если parent
имеет тип времени выполнения QWidget*
, то static_cast<QWidget*>(parent)
четко определено и выполняет то, что вы ожидаете. Если нет, то поведение не определено.
Контрастность с dynamic_cast
, которая всегда определяла поведение, но менее эффективна, поскольку должна использовать информацию о типе времени выполнения.
Хороший способ безопасно снизить версию в режиме отладки и быстро в режиме выпуска, например:
template <typename T, typename U>
T* down_cast(U* x)
{
#ifdef NDEBUG
return static_cast<T*>(x);
#else
return &dynamic_cast<T&>(*x); // Thanks @Martin
#endif
}
используется так:
QWidget* w = down_cast<QWidget*>(parent);