微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我们可以定义两个具有相同名称但参数不同的函数吗?

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

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,s)); 
}

解决方法

当我需要定义另一个函数时,我感到很困惑,可以给它起一个不同的名字。

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

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

,

您正在寻找的内容在C ++中称为“函数重载”。 C ++编译器基于函数的声明创建签名。具有相同名称的函数可以具有完全不同的签名。

在您发布的示例中,由于传递的参数不同,签名也会更改。

这是Signature代表的意思: 有关参与重载解析(13.3)的函数的信息:其参数类型列表(8.3.5),以及(如果函数是类成员)函数本身上的cv限定符(如果有)以及声明成员函数的类。

,

在强类型语言中,解析器可以(原则上)在函数声明时以及函数调用时使名称相同但参数列表(参数的数量和类型)不同的函数有所不同时间。这称为函数重载,也适用于类方法。

C ++提供了此功能。


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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。