QScopedPointer实现中sizeof的使用
The use of sizeof in the implementation of QScopedPointer
为了理解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
时,编译将 fail.But 数组和第二个 sizeof
做什么?光靠sizeof还不够吗?
使用了一个数组,所以它的负数会产生编译时错误。第二行通过确保使用 IsIncompleteType
的实际大小来确保编译器无法跳过 sizeof(T)
的计算。
为了理解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
时,编译将 fail.But 数组和第二个 sizeof
做什么?光靠sizeof还不够吗?
使用了一个数组,所以它的负数会产生编译时错误。第二行通过确保使用 IsIncompleteType
的实际大小来确保编译器无法跳过 sizeof(T)
的计算。