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

标签 c++ constants

这似乎是个愚蠢的问题,但我从未见过这样的问题!

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

对我来说,运算符是一个 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()。如果您用谷歌搜索其中任何一个术语,您一定会找到很多信息。

关于c++ - 不确定我对 C++ 中函数声明的解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591014/

相关文章:

c++ - 从 arm 程序集调用 c 函数时堆的地址发生了变化?

c++ - KEY_WOW64_32KEY 未从 x64 应用程序重定向

.NET const 影响编译的程序集大小

python - 将 int 列乘以 float 常量 pandas 数据帧

rust - Rust 中的不可变变量和常量变量有什么区别?

ruby-on-rails - 访问类的常量

c++ - 将位设置为一个,其中几个值的位都相同?

c++ - 更改 mex 函数中的常量参数

c++ - 具有平凡项(零乘积项)的 g++ 优化算术表达式

c++ - 为什么调用这个方法而不是另一个?