【问题标题】:Different parameter name in function prototype函数原型中的不同参数名称
【发布时间】:2016-08-30 10:13:27
【问题描述】:

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

#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;
}

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

【问题讨论】:

  • 您的示例中的拼写错误可能会让人感到困惑。在声明中,您使用 it 而不是 int 并且您的 include 输入错误

标签: c++ function parameters language-lawyer names


【解决方案1】:

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

[dcl.fct]/13:

(强调我的)

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

还有[dcl.fct]/8:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 2016-07-06
    • 2011-07-11
    • 2018-02-04
    • 1970-01-01
    相关资源
    最近更新 更多