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/