奇怪的布尔超载

时间:2012-06-19 10:19:31

标签: c++

你能解释一下这里的typedef是做什么的,目的是什么?

class C
{
    public:
        ...

        typedef bool (C::*implementation_defined_bool_type)(bool) const;

        operator implementation_defined_bool_type() const {
            return _spi ? &C::isPersistent : 0;
        }

};

1 个答案:

答案 0 :(得分:5)

  

你能解释一下typedef在这里做了什么吗?

typedef bool (C::*implementation_defined_bool_type)(bool) const;

typedef sa 指向C类型的const成员函数的指针,它将bool作为输入参数并返回{{1} }。

虽然,

bool

接收operator implementation_defined_bool_type() const  类型的对象并返回类型C 它被称为转换运算符

  

它的目的是什么?

它实现了“Safe Bool Idiom”,旨在验证布尔上下文中的对象。
请注意Safe Bool Idiom is obsolete与C ++ 11标准。

好读:
The Safe Bool Idiom