Должны ли имена переменных в определении метода быть идентичными именам объявлений в 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++.