方法定义中的变量名必须与C ++中的声明名相同吗?

时间:2014-04-19 08:19:22

标签: c++ class declaration language-lawyer definition

现在,我并不是说我认为这可以接近正确的编码实践(假设它甚至可能);这个问题源于凌晨2点的错误: 假设类定义类似于以下内容:

class myClass
{
public:
    void myMethod(const int & name);
}

和定义:

void myClass::myMethod(const int & altName)
{
    //manipulate altName
}

请注意,声明和定义的参数都是const int&类型,唯一的区别是变量名称。 我知道这不会(在Visual Studio 2012中)抛出编译器错误或警告,但是在运行程序时是否会导致错误?

谢谢!

4 个答案:

答案 0 :(得分:5)

没有。你甚至不需要在函数声明中使用变量名。他们的目的是提供文件。

显然,这可以通过以下方式进行检查:

void foo(int); // or void foo(int bar);

int main()
{
  foo(42);
}

#include <iostream>
void foo(int n)
{
  std::cout << n << std::endl;
}

一般来说,我认为没有理由使用不同的名称,并且在声明中不使用任何名称而不会丢失信息的情况很少。

答案 1 :(得分:1)

为什么给他们不同的名字?

如果您使用Doxygen等系统来记录您的代码,那么为什么会混淆。

保持一致并给他们有意义的名字。

总结为什么让你和使用/维护你的代码的人都很难过生活

AN ASIDE 为什么有些程序员喜欢找到阻力最大的路径?!

答案 2 :(得分:1)

不需要。甚至函数声明中的变量名称也是可选的。但它在传递参数时有助于用户的功能。例如,

void info(int,int);

void info(int age,int salary);

两者都有效,但首先,您可能无法确定要传递的值,其次是明确指示。

答案 3 :(得分:0)

不,原型不需要匹配函数的定义(它是class的成员函数或简单函数)。

你可以这样,

class myClass {
public:
    void myMethod (const int &name1);
}

和定义。

void myClass::myMethod (const int &name2) {
    // use name2 here.
}

您甚至可以跳过函数原型中的参数名称(变量名称)。

像,

class myClass {
public:
    void myMethod (const int &);
}

希望它对你有所帮助。如果没有。阅读当前C ++工作草案中的相关部分。