不用std::generate中的operator()?

No need for the operator () in std::generate?

为什么我们不在std::generate (myvector.begin(), myvector.end(), RandomNumber)中加入operator()呢?像这样:std::generate (myvector.begin(), myvector.end(), RandomNumber()).

代码取自 cplusplus:

int RandomNumber () { return (std::rand()%100); }

int main () {
  std::srand ( unsigned ( std::time(0) ) );

  std::vector<int> myvector (8);

  std::generate (myvector.begin(), myvector.end(), RandomNumber);

  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;

函数指针和函子不是一回事

RandomNumber 是函数名。它会在这里衰减到一个函数指针。这是将可调用对象传递给 std::generate.

等算法的一种方法

另一种方法是创建一个type,一个class,一个functor,它有一个调用运算符(operator())。我们也可以将这种类型的实例传递给像 std::generate 这样的算法,算法将 "call the object like a function" 而不是使用函数指针。

当我们这样做时,为了简洁起见,我们有时会将其实例化为临时的。因此,例如,这个:

Type obj;
f(obj);

很像这样:

f(Type());

(除非在这个简单的例子中最令人烦恼的解析是可疑的;忽略它:P)

因此,您正在寻找的 () 是一个 class 实例化,当您传递函数指针而不是函子时,它是不相关的。

如果你写 RandomNumber(),你只是调用函数 RandomNumber 并将其结果传递给 std::generate,这不是你想要的。