我最近发现,在C ++中,您可以以一种奇怪的方式重载“函数调用”运算符,其中您必须编写两对括号才能这样做:

class A {
  int n;
public:
  void operator ()() const;
};


然后以这种方式使用它:

A a;
a();


什么时候有用?

最佳答案

这可以用来创建"functors"对象,其作用类似于函数:

class Multiplier {
public:
    Multiplier(int m): multiplier(m) {}
    int operator()(int x) { return multiplier * x; }
private:
    int multiplier;
};

Multiplier m(5);
cout << m(4) << endl;


上面打印20。上面链接的Wikipedia文章提供了更多示例。

10-08 18:15