我只是读这个
class biggerThan
{
public:
const int testValue;
biggerThan(int x) : testValue(x) { }
bool operator()(int val) const
{ return val > testValue; }
};
Run Code Online (Sandbox Code Playgroud)
现在说它用过像
std::list<int>::iterator firstBig =
std::find_if(aList.begin(), aList.end(), biggerThan(12));
Run Code Online (Sandbox Code Playgroud)
要么
就像这个更大的对象(12)
现在当使用largeThan(12)时,它可以调用constrcutor来初始化testvalue或者()运算符被重载并且12被传递给函数(bool operator()(int val)const),这样它就返回一个bool.
首先发生哪一个/它是如何工作的
它是否导致任何歧义,或者对重叠运算符的调用是否以某种方式发生
object.operator().(12).
请明确我的不足之处.
也许下面的代码会说清楚:
#include <iostream>
#include <algorithm>
class biggerThan
{
public:
const int testValue;
biggerThan(int x) : testValue(x) {
std::cout << "Construction of biggerThan object with value "
<< x << std::endl;
}
bool operator()(int val) const
{
if (val > testValue) {
std::cout << val << " is bigger than " << testValue
<< std::endl;
return true;
}
else {
std::cout << val << " is *not* bigger than " << testValue
<< std::endl;
return false;
}
}
};
int main() {
int data[] = {0,1,2,3,4,5,6,7,8,9};
std::for_each(data, data+10, biggerThan(4));
}
Run Code Online (Sandbox Code Playgroud)
输出是:
Construction of biggerThan object with value 4
0 is *not* bigger than 4
1 is *not* bigger than 4
2 is *not* bigger than 4
3 is *not* bigger than 4
4 is *not* bigger than 4
5 is bigger than 4
6 is bigger than 4
7 is bigger than 4
8 is bigger than 4
9 is bigger than 4
Run Code Online (Sandbox Code Playgroud)
怎么了:
std::for_each是一个类型的对象biggerThan,它是用参数构造的4.operator()(int)此的biggerThan-object(实际上是它的复制品)被调用中的每个元素data.您使用的算法(std::find_if)在这方面的工作方式相同.