为了了解 Qt 如何防止不完整类型,我浏览了 . 的头文件qscopedpointer.h
。相关部分如下:
template <typename T>
struct QScopedPointerDeleter
{
static inline void cleanup(T *pointer)
{
// Enforce a complete type.
// If you get a compile error here, read the section on forward declared
// classes in the QScopedPointer documentation.
typedef char IsIncompleteType[ sizeof(T) ? 1 : -1 ];
(void) sizeof(IsIncompleteType);
delete pointer;
}
};
我知道sizeof
在不完整类型上使用时编译会失败。但是数组和第二个sizeof
做什么?仅 sizeof 还不够吗?