c++ - 一个没有符号的运算符和两组参数是什么意思?

标签 c++ operator-overloading

Here我看到了一些运算符重载的明显例子。语法如下:

type operator sign (parameters) { /*...*/ }

在我处理的代码中,我发现了以下字符串:

bool operator () (int a)

我在使用这段代码时遇到的第一个问题是没有运算符符号(不像operator+operator*)。第二个问题是,在参数 (int a) 前面,我看到了 () 并且我无法找出它应该做什么。你能帮我解决这个问题吗?

最佳答案

您关于没有运算符符号的说法是错误的。运算符是 () 运算符。请注意,有两组括号。第一组是函数名称的一部分,operator (),第二组是该运算符的参数。

operator () 重载在您使用一个对象时被调用,它被定义为一个函数。考虑:

struct greater_than_five
{
  bool operator()(int x) const { return x > 5; }
};

此类有 operator () 重载,因此当您将大于 5 的整数传递给它时,它会返回 true。你可以像这样使用它:

greater_than_five f;
if (f(10)) {
  // 10 is greater than 5
}

请注意,尽管 f 不是函数,而是 greater_than_five 类型的对象,但我们可以像函数一样调用,使用 f(10)。这是一个愚蠢的例子,但演示了此类的使用。这些类通常称为仿函数函数对象

关于c++ - 一个没有符号的运算符和两组参数是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15095206/

相关文章:

c++ - 如何在C++中为友元函数提供保护

c++ - 如何根据对的第二个元素对对的 vector 进行排序?

c++ - 为什么 g++ 不在这里启用 RVO?

运算符 [] 的 C++ 重载不适用于模板类

c++ - 比较运算符重载,为什么编译器不做这项工作?

c++ - 具有多重继承的 operator() 定义不明确

c++ - 如何将 Boost 库添加到 RPI2 上的 QTCreator?

c++ - 动态字符串数组容器类在 delete[] 运行时挂起

C++ 运算符重载错误检查无异常

c++ - `cout << x` 和 `cout.operator<<(x)` 和 `operator(std::cout, x)` 之间的区别?