Как определяется вызываемая перегрузка функции

В C++ вызов неоднозначен: преобразования int в double и unsigned int имеют одинаковый ранг, и ни одна перегрузка не лучше. Значение −10 не участвует в выборе по типу.

Короткий ответ

Что ответить на собеседовании

В C++ вызов неоднозначен: преобразования int в double и unsigned int имеют одинаковый ранг, и ни одна перегрузка не лучше. Значение −10 не участвует в выборе по типу.

Подробный разбор

Ответ с пояснениями

Условие

Нужно понять, какая из перегруженных функций test будет выбрана при вызове.

void test(double a)
{
}

void test(unsigned int a)
{
}

int main() {
    int a = -10;
    test(a);
}

Ответ

В C++ вызов неоднозначен: преобразования int в double и unsigned int имеют одинаковый ранг, и ни одна перегрузка не лучше. Значение −10 не участвует в выборе по типу.

Можно добавить точную перегрузку void test(int) либо явно выбрать нужное преобразование, если оно соответствует смыслу задачи. Приведение отрицательного значения к unsigned меняет его представляемое числовое значение и не должно использоваться только для подавления ошибки.

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

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее