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

C++ 关于转换运算符和运算符(),c++,c++11,syntax,operator-overloading,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; } }

在以下代码中:

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();
}
模板类mval{
受保护的:
T最大值;
公众:
模板mval(iter开始,iter结束):最大(*开始){
while(开始!=结束){
(*这个)(*开始);
++开始;
}
}
void运算符()(常量T&T){
如果(t>max)
max=t;
}
作废打印(){

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

(*此)
导致对
mval
的引用,然后可以调用
运算符()
。这是相同的原因
x(T)
有效,
x
是一个
mval
。另一方面,你的代码有一个逻辑错误-你解除了
开始
-但是如果你有一个零大小的容器怎么办?@SergeyA这不是我的代码,它来自一个测试。
(*this)(*begin);
看起来像是对mval的强制转换:
(mval)(*begin)
@kuhaku:正如我在回答中所说的,
*这
不是一个问题type@kuhaku,
不是一种类型。
*此
不是一种类型。因此,在任何地方都看不到铸造操作员。