重载的括号运算符,没有参数的特征名称

时间:2014-10-21 14:11:14

标签: c++ operator-overloading functor

维基百科关于Properties的文章介绍了一个可用于创建属性成员的模板类(轻微编辑):

template <typename T> class property {
        T value;
    public:
        T & operator = (const T &i) {
            return value = i;
        }

        operator T const & () const {
            return value;
        }
};


struct Bar {
    // Using the property<>-template.
    property <bool> alpha;
    property <unsigned int> bravo;
};

int main () {
    Bar bar;
    bar.alpha = true;

    return bar.bravo;
}

我想弄清楚的是C ++功能的名称,它允许bar.bravo存在而没有尾随()

代码compiles很好......我只是不明白为什么!

谷歌搜索指向“Functors&#39;”,但那些重载的parens运算符似乎都有参数(我可以理解它们是如何工作的)。

2 个答案:

答案 0 :(得分:2)

此:

    operator T const & () const {
        return value;
    }

overloaded conversion运营商。因为它不是explicit,所以它允许隐式转换。

答案 1 :(得分:1)

班级property<T>定义了“隐式转换为T const &”运算符:

operator T const & () const { return value; }

因此,您可以将property<T>类型的值转换为类型T的值(更具体地说,转换为T类型的常量左值)。