Почему имена аргументов функции не имеют значения в объявлениях c++?
имена аргументов функции в объявлениях (которые, скорее всего, находятся в файле заголовка), по-видимому, полностью игнорируются компилятором. Какие причины для разрешения компиляции следующего с использованием либо объявления версии 1, либо 2?
реализация
void A::doStuff(int numElements, float* data)
{
//stuff
}
декларация-Версия 1
class A
{
public:
void doStuff(int numElements, float* data);
}
декларация-Версия 2
class A
{
public:
void doStuff(int, float*);
}
5 ответов
компилятору нужно только знать, какие аргументы требует метод. Для компилятора неважно, как вы их называете.
компилятор должен знать типы аргументов по нескольким причинам:
- решите, какой метод использовать, если есть несколько методов с одинаковым именем метода
- решите, являются ли входные параметры допустимыми
- решите, нужно ли кастовать параметры
- решите, как создать код для вызова метода и обработки ответа
однако я предлагаю использовать первую версию заголовка. Это помогает другим разработчикам (и себе) использовать функции и знать, какие параметры имеют какое значение.
имена параметров не являются частью сигнатуры функции. Если вы не используете их, вы не нужно иметь имена даже в реализации функции.
единственная причина, по которой я могу думать о том, что версия 1 лучше, - это читаемость. Они игнорируются, поскольку они не имеют значения для компилятора.
..потому что, когда заголовки включены в другие модули, им нужны только типы для создания правильного кода. Названия АЭ часто полезны и удобны, но нопт абсолютно необходимы.