Должны ли имена переменных в определении метода быть идентичными именам объявлений в C++?

Я не говорю, что думаю, что это будет где-то рядом с правильной практикой кодирования (при условии, что это даже возможно); Этот вопрос возникает из-за ошибки в 2 часа ночи. Предположим, определение класса напоминает следующее:

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

и определение:

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

Обратите внимание, что параметры как объявления, так и определения имеют тип const int &, единственное отличие - это имя переменной. Я знаю, что это не приводит (в Visual Studio 2012) к ошибке или предупреждению компилятора, но может ли это привести к ошибке при запуске программы?

Спасибо!

4 ответа

Нет. Вам даже не нужны имена переменных в объявлении функции. Их целью является документация.

Очевидно, это можно проверить тривиально:

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

int main()
{
  foo(42);
}

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

В общем, я не вижу причин использовать разные имена, и случаи, когда вы можете не использовать имя в декларации без потери информации, редки.

Не требуется Даже имя переменной в объявлении функции необязательно. Но это помогает пользователю функции при передаче параметра. Например,

void info(int,int);

а также,

void info(int age,int salary);

Оба действительны, но, во-первых, вы не можете быть уверены в том, какое значение передать, во-вторых, четко указывается.

Зачем давать им разные имена?

Если вы используете систему, такую ​​как Doxygen, для документирования своего кода, зачем путать вещи.

Просто будьте последовательны и дайте им значимые имена.

В заключение, зачем усложнять жизнь вам и людям, использующим / поддерживающим ваш код

В стороне Почему некоторые программисты любят находить путь наибольшего сопротивления?!

Нет, прототип не должен соответствовать определению функции (либо это функция-член 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++.

Другие вопросы по тегам