【问题标题】:Do variable names in the definition of a method have to be identical to declaration names in C++?方法定义中的变量名称是否必须与 C++ 中的声明名称相同?
【发布时间】:2014-04-19 08:19:22
【问题描述】:

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

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

及定义:

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

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

谢谢!

【问题讨论】:

  • 您必须区分(成员)variaböes 和函数parameters。后者不需要在声明和定义中具有相同的名称。

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


【解决方案1】:

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

显然这可以简单地检查:

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

int main()
{
  foo(42);
}

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

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

【讨论】:

  • 推荐的是??
  • @CouchDeveloper 我不知道 OP 正在寻求建议。我倾向于使用相同的名称,但有时可以在没有参数名称的情况下声明具有明确名称和单个参数的函数而不会丢失信息。例如,double sqrt(double)
  • 同意。特别是,我会发现使用不同的名称非常令人困惑。 ;)
【解决方案2】:

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

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

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

总而言之,为什么要让您和使用/维护您的代码的人的生活变得艰难

旁白为什么有些程序员喜欢寻找阻力最大的路径?!

【讨论】:

  • 声明可能位于您无法控制的头文件中,并且您的参数名称可能更具描述性,或符合本地编码约定。
  • @ClickRick - 嗯?程序员是否同时写入头文件和定义(.cpp)文件。 IE。遵守一种编码标准。你是说有些程序员只是写头文件而不考虑可怜的草皮编写代码来执行该合同吗?
【解决方案3】:

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

void info(int,int);

和,

void info(int age,int salary);

两者都是有效的,但首先,您可能不确定要传递什么值,其次给出明确的指示。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 1970-01-01
      相关资源
      最近更新 更多