您可以使用 static_cast 将任何指向 T 的指针转换为 void* 或从 void* 转换,为什么 Qt 使用 reinterpret_cast?
int SOME_OBJECT::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QMainWindow::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
switch (_id) {
// Why reinterpret_cast here??
case 0: on_tabWidget_tabCloseRequested((*reinterpret_cast< int(*)>(_a[1]))); break;
default: ;
}
_id -= 1;
}
return _id;
}
Run Code Online (Sandbox Code Playgroud)
坦白说,我也一直无法弄清楚。该void **结构的创建方式相同,只需转换一个int*to void*,然后在另一侧执行这个奇怪的转换。据我所知, static_cast 不仅可以,而且会更好。
您会发现像 Qt 这样的大型项目中有很多有问题的代码。有时,某些东西会漏掉审查或只是保留下来,因为没有人愿意经历更改它的麻烦。
| 归档时间: |
|
| 查看次数: |
3648 次 |
| 最近记录: |