sno*_*kin 6 c++ qt pointers casting
我刚刚看到这个例子:
向下滚动到页面底部,您将找到该页面
QWidget *pw = static_cast<QWidget *>(parent);
Run Code Online (Sandbox Code Playgroud)
Parent是类型:QObject,它是QWidget的Base类,所以在这种情况下,isnt:dynamic_cast应该使用?
如:
QWidget *pw = dynamic_cast<QWidget*>(parent)
Run Code Online (Sandbox Code Playgroud)
谢谢,
如果你知道你正在从一个基础类下行到一个后代类(也就是说,你知道该对象实际上是一个后代类的实例),那么static_cast是完全合法的(并且性能更高).
不,如果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
}
Run Code Online (Sandbox Code Playgroud)
像这样使用:
QWidget* w = down_cast<QWidget*>(parent);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
688 次 |
最近记录: |