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

C++ 没有符号和两组参数的运算符意味着什么?,c++,operator-overloading,C++,Operator Overloading,我看到了一些操作符重载的明显例子。语法如下所示: type operator sign (parameters) { /*...*/ } 在我处理的代码中,我发现了以下字符串: bool operator () (int a) 这个代码的第一个问题是没有运算符符号(不像operator+或operator*)。第二个问题是,在参数(inta)前面,我看到了(),但我不知道它应该做什么。你能帮我一下吗?你说没有操作员符号是不对的。操作员是()操作员。请注意,有两组括号。第一组是函数名的一部分,

我看到了一些操作符重载的明显例子。语法如下所示:

type operator sign (parameters) { /*...*/ }
在我处理的代码中,我发现了以下字符串:

bool operator () (int a)

这个代码的第一个问题是没有运算符符号(不像
operator+
operator*
)。第二个问题是,在参数
(inta)
前面,我看到了
()
,但我不知道它应该做什么。你能帮我一下吗?

你说没有操作员符号是不对的。操作员是
()
操作员。请注意,有两组括号。第一组是函数名的一部分,
操作符()
,第二组是该操作符的参数

每当您使用一个对象时,
操作符()
重载就会被调用,该对象被定义为函数。考虑:

struct greater_than_five
{
  bool operator()(int x) const { return x > 5; }
};
此类重载了
运算符()
,因此当您传递一个大于5的整数时,它将返回
true
。你可以这样使用它:

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

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

这意味着可以使用类似于函数的语法调用具有该运算符的类的实例。此类可以称为函子:

操作符()
部分意味着可以使用
()
调用操作符,下面是参数列表,类似于普通函数的参数列表。

操作符“()”是括号操作符。您可以重载它以获取任意类型和任意数量的参数。下面是一个例子:

class Vector3
{
public:
Vector3(float x, float y, float z)
{
    _data[0] = x;
    _data[1] = y;
    _data[2] = z;
}

float& operator() (const int component)
{
    assert(component >= 0 && component < 3);
    return _data[component];
}

private:
    float _data[3];
};
类向量3
{
公众:
矢量3(浮动x、浮动y、浮动z)
{
_数据[0]=x;
_数据[1]=y;
_数据[2]=z;
}
浮点运算符()(常量int组件)
{
断言(组件>=0&&component<3);
返回_数据[组件];
}
私人:
浮动数据[3];
};
用法:

Vector3 vec(3.0, 1.0, 2.0);
vec(2) = 0.5;
cout<<"Third component : "<<vec(2);
vector3vec(3.0,1.0,2.0);
vec(2)=0.5;

我的第一个想法是,
()
是我们重载的操作符,但在我链接的网页上,
()
不在“重载操作符”列表中。@Roman是的-在
[]
之后和
之前,
。尽管如此,这个网站并不是一个有信誉的C++信息源,你不能只问每一个。请阅读中的一个或多个项目。
class Vector3
{
public:
Vector3(float x, float y, float z)
{
    _data[0] = x;
    _data[1] = y;
    _data[2] = z;
}

float& operator() (const int component)
{
    assert(component >= 0 && component < 3);
    return _data[component];
}

private:
    float _data[3];
};
Vector3 vec(3.0, 1.0, 2.0);
vec(2) = 0.5;
cout<<"Third component : "<<vec(2);