我们可以定义两个名称相同但参数不同的函数吗?

Can we define two functions with same name but different parameters?

我很困惑,当我们需要定义另一个函数时,我们可以给它起一个不同的名字。但是在 LeetCode 讨论中,我发现了一个流行的 post,其中有两个同名但参数不同的函数。

int longestPalindromeSubseq(string s) {
    return longestPalindromeSubseq(0,s.size()-1,s); 
}
int longestPalindromeSubseq(int l, int r, string &s) {
    if(l==r) return 1;
    if(l>r) return 0;  //happens after "aa" 
    return s[l]==s[r] ? 2 + longestPalindromeSubseq(l+1,r-1, s) : 
        max(longestPalindromeSubseq(l+1,r, s),longestPalindromeSubseq(l,r-1, s)); 
}

I am confused when we need to define another function we can give it a different name.

这是C++最基本的特性之一:函数重载。在 C 中,您根本不能有两个同名的函数。在C++中,只要函数函数签名不同,即两个函数具有相同的名称但不同的参数集,这是完全可能的。

https://en.wikipedia.org/wiki/Function_overloading

您所看到的在 C++ 中称为“函数重载”。 C++ 编译器根据函数的声明创建签名。您可以拥有完全不同的同名函数签名。

在您发布的示例中,由于传递的参数不同,签名发生了变化。

签名的含义如下: 有关参与重载决议的函数的信息 (13.3):它的 parameter-type-list (8.3.5),如果函数是 class 成员,则 cv-qualifiers (如果有的话)在函数本身和声明成员函数的 class 上。

在强类型语言中,解析器也可以(原则上)在 function-declaration 时区分具有相同名称但参数列表(参数的数量和类型)不同的函数作为 function-call 时间。这称为函数重载,也适用于 class 方法。

C++ 提供此功能。


在某些情况下,有歧义,编译器会告诉你。在 C++ 中,您不能声明仅 return 类型不同的函数。