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,此
不是一种类型。*此
不是一种类型。因此,在任何地方都看不到铸造操作员。