我一直在阅读代码 QScopedPointer
并遇到了一些我无法理解的事情。
这是相关的代码 QScopedPointer
在code.qt.io上:
template <typename T, typename Cleanup = QScopedPointerDeleter<T> >
class QScopedPointer
{
typedef T *QScopedPointer:: *RestrictedBool;
public:
...
#if defined(Q_QDOC)
inline operator bool() const
{
return isNull() ? Q_NULLPTR : &QScopedPointer::d;
}
#else
inline operator RestrictedBool() const
{
return isNull() ? Q_NULLPTR : &QScopedPointer::d;
}
#endif
...
inline bool isNull() const
{
return !d;
}
...
protected:
T *d;
我理解QDoc认为的预处理器定义 QScopedPointer
有一个 operator bool
代替 operator RestrictedBool
。我不明白它的目的是什么 RestrictedBool
服务以及如何做到这一点。例如,更简单的实现是:
inline operator bool() const
{
return !isNull();
}
简而言之: 这里发生了什么事?为什么是 operator RestrictedBool
卑鄙地归还了地址 d
为什么它首先存在而不是 operator bool
?