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

Tom*_*dok 0 c++ overloading class parentheses

我经常看到这种情况,并且想知道它的用途/目的。

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

std::vector<double> operator()(int seed) const;
Run Code Online (Sandbox Code Playgroud)

谢谢!

Gil*_*llé 6

就我所知,函子和矩阵索引是最常见的用例。

矩阵索引
对于矩阵类,您可以执行以下操作:

Matrix3x3 A;
A(1,2) = 2;
Run Code Online (Sandbox Code Playgroud)

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

函数
如果您希望对象充当还可以存储信息的功能,则可以执行以下操作:

Accumulator accumulate;
for(int i=0; i<20; ++i)
    accumulate(i);
std::cout << accumulate.sum << std::endl;
Run Code Online (Sandbox Code Playgroud)

在C ++中,即使比较器对象不存储信息,也经常会遇到它们的函子。

  • 可能应该提到这样做是因为矩阵索引的完成是因为索引运算符只允许*精确地*一个参数,而parens可以采用任何数字 (2认同)