关于转换运算符和运算符()

时间:2016-02-02 22:02:42

标签: c++ c++11 syntax operator-overloading

在以下代码中:

template <class T> class mval {
protected:
    T max;
public:
    template <class iter> mval (iter begin, iter end):max(*begin) {
        while(begin != end) {
            (*this)(*begin);
            ++begin;
        }
    }
    void operator()(const T &t) {
        if (t > max)
            max = t;
    }
    void print() {
        cout << max;
    }
};

int main() {
    int arr[3] = { 10,20,5 };
    (mval<int>(arr, arr + 3)).print();
}

为什么(*this)(*begin);会导致operator()

只有当你有类似mval x; x(T);之类的东西时,它才能进入这个运算符吗?但它的行为就像它是一个转换运算符,怎么样?

1 个答案:

答案 0 :(得分:4)

mval x; x(T);(*this)(*begin);有什么不同?在这两种情况下,我都会看到一个mval类型的对象,后跟括号,里面有一个参数。你期望发生什么? (*this)不是一个类型,它是mval类型的左值,所以我不知道它是如何“表现得像它是一个转换运算符”。