1

为了了解 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 还不够吗?

4

1 回答 1

1

使用了一个数组,因此它的负大小会产生编译时错误。sizeof(T)第二行通过确保使用实际大小来确保编译器不能跳过评估IsIncompleteType

于 2018-07-25T05:51:31.017 回答