C++ stl for_each() 和仿函数,它在哪里创建新对象

C++ stl for_each() and functor, where does it create new objects

我是仿函数的新手。谁能在下面的代码中向我解释一下,程序何时为向量的每个元素创建 AddValue class 的对象?对我来说,for_each() 函数应该做的是首先从 vec 中获取一个元素,然后使用这个值 (obj.i=value) 创建一个新的 AddVal 对象,然后调用仿函数 AddVal(20 ) 将 20 添加到 i 并打印出来。但是我没有看到创建新对象的过程发生在哪里。感谢你。

#include<iostream>
#include<vector>
#include<algorithm>
class AddVal{
        public:
        int i;
        AddVal(int x) : i(x) {}
        void operator () (int val) {std::cout << val+i << std::endl;}
};

int main()
{
        std::vector<int> vec = {1,2,3,4,5};
        for_each(vec.begin(),vec.end(),AddVal(20));
}
for_each(vec.begin(),vec.end(),AddVal(20));
//                                ^
//                           right here

AddVal(20) 创建一个临时 AddVal 对象,调用构造函数 AddVal(int x),并将 20 作为参数传递给该构造函数。 for_each 算法然后在 vec.

的每个元素上使用此对象(或其副本)中的 operator()

AddVal(20) 创建单个 AddVal 对象作为第三个参数传递给 for_eachfor_each 然后在向量的每个元素上计算此对象。该代码有点等同于:

std::vector<int> vec = {1,2,3,4,5};
AddVal add_val(20);  // create the AddVal object
for (const int& i : vec) {
  add_val(i);  // calls AddVal::operator()
}