Что в C/C++ считается сигнатурой функции?

Рейтинг: 0Ответов: 1Опубликовано: 14.08.2023

Возьмём такой пример кода:

#include <iostream>
int Foo (int x);
int main()
{
    std::cout<< Foo (10) << std::endl;
    return 0;
}
int Foo (const int x)
{
    return x*x;
}

Он успешно скомпилируется. Получается, компилятор проигнорировал, что в прототипе const отсутствует, а в реализации он есть. Что же в таком случае компилятор считает сигнатурой? Какие пункты стандарта регулируют этот вопрос?

Ответы

▲ -1

Параметры функций, указанные как const, не могут меняться внутри функции. При объявлении функции, в ее прототипе для параметров, которые передаются по значению, указывать const необязательно, т.е. записи идентичные:

int Foo (int x); 
int Foo (const int x); 

Т.е. для параметров, передаваемых по значению, const всего лишь защитит на этапе компиляции этот параметр от изменения внутри функции Если изменить вашу Foo таким образом:

int Foo (const int x)
{
    x++;
    return x*x;
}

Получите ошибку компиляции

error: increment of read-only parameter ‘x’