不确定我对c++中函数声明的解释
Not sure about my interpretation of function declaration in C++?
这似乎是一个愚蠢的问题,但我从来没有见过这样的事情!
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
对象,str1
和str2
。然后我们可以这样写
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()
前两个括号表示它是函数调用操作符(就像+
表示它是+
操作符一样,等等),然后跟在参数列表后面。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- 请解释"函数1(p1,p2,p3);"的输出
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- #ifdef和未声明的标识符
- C 无法解释的类“尚未声明”错误,这是由于名称空间而导致的
- 如何在包含 typedef 时用从右到左的规则解释变量声明
- 函数调用解释为声明
- 解释 C 中的函数的变量声明
- 临时函数调用的构造被解释为声明
- 有人能解释一下这个模板函数声明的语法吗
- 请解释一下这个朋友声明是什么意思
- 解释错误:ISO C++禁止声明没有类型的"人员列表"
- 不确定我对c++中函数声明的解释