【发布时间】:2016-02-02 22:02:42
【问题描述】:
在以下代码中:
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); 的东西时,它不应该交给这个运营商吗?但它的行为就像一个转换运算符,如何?
【问题讨论】:
-
(*this)导致对mval的引用,然后您可以调用operator()。这与x(T)起作用的原因相同,x是mval。 -
附带说明一下,您的代码有一个逻辑错误 - 您取消了
begin的引用 - 但是如果为您提供了一个零大小的容器怎么办? -
@SergeyA 这不是我的代码,它来自测试。
标签: c++ c++11 syntax operator-overloading