这是运算符别名吗?

时间:2016-07-19 21:08:09

标签: c++

我不明白是什么意思typedef void (Testable::*bool_type)() const; 已应用于operator

是这样的代码

class Testable {
    typedef void (Testable::*bool_type)() const;

public:

    operator bool_type() const {
     ...
    }
};

相当于

class Testable {

public:

    void operator ()() const {
     ...
    }
};

1 个答案:

答案 0 :(得分:2)

class Testable {
    typedef void (Testable::*bool_type)() const;

public:

    operator bool_type() const {
     ...
    }
};

...定义了对bool_type的隐式转换,这是指向成员类型的无法访问的指针。

这是一种C ++ 03技术,可以提供对bool的隐式转换,同时避免意外的隐式转换,特别是对于函数调用重载解析。返回的成员指针转换为bool但不转换为可以设想用于函数参数的任何类型。相反,纯bool结果将转换为例如intvoid*结果(used by C++03 iostreams)与void*正式参数匹配。

使用C ++ 11及更高版本,您可以使用 explicit ,如下所示:

explicit operator bool() const { return whatever; }

但更好的是,定义一个命名转换函数,例如

auto is_empty() const -> bool { return whatever; }

在C ++ 03中通常也更好。 : - )

关于“这样的代码等同于......”,不,它不是。