不带参数的重载圆括号运算符功能名称

Overloaded Parenthesis operator with no arguments feature name

本文关键字:运算符 功能 圆括号 重载 参数      更新时间:2023-10-16

维基百科关于属性的文章提供了一个模板类,可以用来创建属性成员(经过轻微编辑):

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存在,并且没有尾随的()

代码编译得很好。。。我只是不知道为什么!

谷歌搜索让我想到了"Functors",但那些重载的parens运算符似乎都有争论(我能理解它们是如何工作的)。

这:

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

是一个重载的转换运算符。因为它不是explicit,所以它允许隐式转换。

property<T>定义了一个"隐式转换为T const &"运算符:

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

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