不确定我对c++中函数声明的解释

Not sure about my interpretation of function declaration in C++?

本文关键字:声明 解释 函数 c++ 不确定      更新时间:2023-10-16

这似乎是一个愚蠢的问题,但我从来没有见过这样的事情!

int operator() (const std::string& s1, const std::string& s2) const

to me operator是一个const成员函数,返回一个整数,没有变量参数!但是需要两个const变量s1和s2吗?我不明白这是怎么回事!

class str_dist_ : 
public std::binary_function<std::string, std::string, int> {
public:
  int op() (const std::string& s1, const std::string& s2) const
  {
    if (s1 == s2)
      return 0;
    else if (s1.empty())
      return std::max(s2.size()/2, 1u);
    else if (s2.empty())
      return std::max(s1.size()/2, 1u);
    else 
      return min_edit_distance(s1, s2, zero_one_cost<char>(' '));
  }
  std::string empty() const { return std::string(); }
};

operator()部分表示可以"调用"str_dist_类型的对象,就好像它是一个函数一样。(const std::string& s1, const std::string& s2)告诉我们实参是什么

例如,假设我们有一个对象str_dist_ obj;和两个std::string对象,str1str2。然后我们可以这样写

int result = obj(str1, str2);

下面的前一行与

相同
int result = obj.operator()(str1, str2);

请注意,第一组括号是成员函数operator()的名称的一部分,而第二组括号实际上列出了参数。

如果您想了解更多信息,请查找Functors或Function Objects。这些术语用于指代诸如str_dist_对象之类的东西,这些对象具有为其定义的operator()。如果你用谷歌搜索这两个词中的任何一个,你肯定会找到很多信息。

这是括号操作符(或"函数调用操作符"):

Foo x;
int n = x(12, 'a');
int m = x.operator()(12, 'a'); // equivalent

这里的操作符声明为int Foo::operator()(int, char)

这是"函数调用操作符",它允许一个对象"作为函数"使用,即:

str_dist_ myObject;
cout<<myObject("A string", "Another string"); // calls operator()

前两个括号表示它是函数调用操作符(就像+表示它是+操作符一样,等等),然后跟在参数列表后面。

重载函数调用操作符的全部意义在于创建函数子(函数对象),它比普通函数有几个优点。