Почему имена аргументов функции не имеют значения в объявлениях 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 лучше, - это читаемость. Они игнорируются, поскольку они не имеют значения для компилятора.


..потому что, когда заголовки включены в другие модули, им нужны только типы для создания правильного кода. Названия АЭ часто полезны и удобны, но нопт абсолютно необходимы.