重载括号运算符有什么作用?

What does overloading the parentheses operator do?

我经常看到这个,我想知道它 does/its 的目的是什么。

  1. 重载 operator() 有什么作用?
  2. 为什么人们通常会重载这个运算符?

例子

std::vector<double> operator()(int seed) const;

谢谢!

Functors and matrix indexing 据我所知,是最常见的用例。

矩阵索引
对于矩阵 class,你可以这样做:

Matrix3x3 A;
A(1,2) = 2;

在这种情况下使用括号而不是括号的主要原因是括号运算符只接受一个参数,而括号运算符接受多个参数。

函子
如果你想让一个对象充当一个函数,也可以存储信息,你可以这样做:

Accumulator accumulate;
for(int i=0; i<20; ++i)
    accumulate(i);
std::cout << accumulate.sum << std::endl;

在 C++ 中,您还会经常遇到 comparator objects 的仿函数,即使它们不存储信息。