6

编译器似乎完全忽略了声明中的函数参数名称(很可能位于头文件中)。允许使用声明版本 1 或 2 编译以下内容的原因是什么?


执行

void A::doStuff(int numElements, float* data)
{
    //stuff
}

声明 - 版本 1

class A
{
public:
    void doStuff(int numElements, float* data);
}

声明 - 第 2 版

class A
{
public:
    void doStuff(int, float*);
}
4

5 回答 5

11

编译器只需要知道该方法需要什么样的参数。编译器如何调用它们并不重要。

编译器需要知道参数类型有几个原因:

  • 如果有多个具有相同方法名称的方法,请确定使用哪种方法
  • 判断输入参数是否有效
  • 判断参数是否需要强制转换
  • 决定如何生成代码来调用方法和处理响应

但是,我建议使用第一个标头版本。它可以帮助其他开发人员(和您自己)使用这些功能并了解哪些参数具有哪些含义。

于 2012-04-19T09:20:40.317 回答
6

参数名称不是函数签名的一部分。除非您使用它们,否则即使在函数实现中也不需要名称。

于 2012-04-19T09:18:41.547 回答
5

因为名称不会影响编译器在函数之外所做的任何事情。

于 2012-04-19T09:18:33.000 回答
1

我认为版本 1 更好的唯一原因是可读性。它们被忽略,因为它们对编译器无关紧要。

于 2012-04-19T09:18:31.603 回答
1

..因为当标头包含在其他模块中时,它只需要生成正确代码的类型。名称 ae 通常有用且方便,但不是绝对必要的。

于 2012-04-19T09:21:55.003 回答