Tag: reinterpret演员

正确的方法来投射指针types

考虑下面的代码 (以及VirtualAlloc()返回一个void* )的事实: BYTE* pbNext = reinterpret_cast<BYTE*>( VirtualAlloc(NULL, cbAlloc, MEM_COMMIT, PAGE_READWRITE)); 为什么selectreinterpret_cast而不是static_cast ? 我曾经认为reinterpret_cast是好的例如铸造指针和整数types的指针(如DWORD_PTR ),但从一个void*转换为BYTE* ,是不是static_cast好吗? 在这种特殊情况下是否存在任何(微妙的)差异,还是仅仅是有效的指针转换? C ++标准是否对这种情况有偏好,build议一种方式而不是另一种?

qobject_cast如何工作?

我刚刚在Qt中find下面的代码,我有点困惑这里发生了什么。 特别是对于reinterpret_cast<T>(0)是什么? template <class T> inline T qobject_cast(const QObject *object) { // this will cause a compilation error if T is not const register T ptr = static_cast<T>(object); Q_UNUSED(ptr); #if !defined(QT_NO_MEMBER_TEMPLATES) && !defined(QT_NO_QOBJECT_CHECK) reinterpret_cast<T>(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast<T>(const_cast<QObject *>(object))); #endif return static_cast<T>(const_cast<QObject *>(reinterpret_cast<T>(0)->staticMetaObject.cast(const_cast<QObject *>(object)))); } 任何人都在意解释?

通过void *投射,而不是使用reinterpret_cast

我正在读一本书,我发现不应该直接使用reinterpret_cast ,而是将其与static_cast结合使用void * T1 * p1=… void *pv=p1; T2 * p2= static_cast<T2*>(pv); 代替: T1 * p1=… T2 * p2= reinterpret_cast<T2*>(p1); 但是,我无法find一个解释为什么这比直接演员更好。 如果有人能给我一个解释或指出我的答案,我将非常感激。 提前致谢 ps我知道什么reinterpret_cast用于,但我从来没有看到这是用这种方式