没有符号的运算符和两组参数意味着什么?

Rom*_*man 0 c++ operator-overloading

在这里,我看到了一些运算符重载的明显例子.语法如下:

type operator sign (parameters) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

在我工作的代码中,我找到了以下字符串:

bool operator () (int a)
Run Code Online (Sandbox Code Playgroud)

我对此代码的第一个问题是没有操作符(没有像operator+operator*).第二个问题是,在(int a)我看到的论点面前,()我无法找出应该做的事情.你能帮帮我吗?

Jos*_*eld 7

你没有关于没有操作符号的错误.运营商是()运营商.请注意,有两组括号.第一个集合是函数名称的一部分,operator ()第二个集合是该运算符的参数.

operator ()每当你使用它,仿佛它是一个函数,定义对象超载被调用.考虑:

struct greater_than_five
{
  bool operator()(int x) const { return x > 5; }
};
Run Code Online (Sandbox Code Playgroud)

这个类已经operator ()重载,当你传递一个大于5的整数时,它会返回true.您可以像这样使用它:

greater_than_five f;
if (f(10)) {
  // 10 is greater than 5
}
Run Code Online (Sandbox Code Playgroud)

请注意,虽然f不是函数并且是类型的对象greater_than_five,但我们可以将其称为函数,使用f(10).这是一个愚蠢的例子,但演示了这些类的使用.这些类通常称为仿函数函数对象.