函数原型中的参数名不同

10

我发现一个程序中在函数原型和声明中使用了不同的参数,所以我写了一个基本的程序。

#include <iostream>
using namespace std;

void add(int a, int b);

int main()
{
     add(3,4);
}

void add(int c, int d){
    int e = c + d;
    cout << e << endl;
}

我运行了这个程序,它可以工作。这是否意味着在“函数原型”和“函数声明”中使用相同的参数名称并不是必要的?


1
你的例子中的拼写错误可能会让人感到困惑。在声明中,你使用了 it 而不是 int,而且你的 include 拼错了。 - Hayt
1个回答

15
是的,在声明和定义中使用的参数名称不必相同。相反,参数的类型(和顺序)应该相同。实际上,在函数声明中,参数名称并不是必需的,即使在定义中,如果您不使用它们,它们也可以被省略。

[dcl.fct]/13:

(我的强调)

标识符可以选择作为参数名称提供;如果在函数定义([dcl.fct.def])中存在,它将命名一个参数。[注意:特别是,在函数定义中参数名称也是可选的,不同声明中用于参数的名称和函数定义中的名称不必相同。如果在不是定义的函数声明中存在参数名称,则它不能在其函数声明符之外使用,因为那是其潜在范围的范围([basic.scope.proto])。-注]

并且[dcl.fct]/8

返回类型、参数类型列表、ref-qualifiercv-qualifier-seq以及函数是否具有非抛出exception-specification,但不包括默认参数([dcl.fct.default])或异常说明([except.spec]),都是函数类型的一部分。

请注意,参数类型列表(不包括名称)是函数类型的一部分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接