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

Do variable names in the definition of a method have to be identical to declaration names in C++?

本文关键字:声明 C++ 定义 变量名 方法      更新时间:2023-10-16

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

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

和定义:

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

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

谢谢!

否。在函数的声明中甚至不需要变量名。他们的目的是文件。

显然,这可以进行琐碎的检查:

void foo(int); // or void foo(int bar);
int main()
{
  foo(42);
}
#include <iostream>
void foo(int n)
{
  std::cout << n << std::endl;
}

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

为什么给它们取不同的名字?

如果你使用的是Doxygen这样的系统来记录你的代码,为什么会混淆事情。

只要保持一致,给他们取有意义的名字。

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

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

不需要。函数声明中变量的偶数名称是可选的。但它在传递参数的同时帮助了函数的用户。例如,

void info(int,int);

和,

void info(int age,int salary);

两者都是有效的,但在第一种情况下,您可能不确定要传递什么值,第二种情况下会给出明确的指示。

否,原型不需要匹配函数的定义(它是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++工作草案中的相关部分。