函数对象和构造函数

mun*_*ish 1 c++

我只是读这个

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).

请明确我的不足之处.

Bjö*_*lex 7

也许下面的代码会说清楚:

#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)

怎么了:

  1. 最后一个参数std::for_each是一个类型的对象biggerThan,它是用参数构造的4.
  2. operator()(int)此的biggerThan-object(实际上是它的复制品)被调用中的每个元素data.

您使用的算法(std::find_if)在这方面的工作方式相同.