В четвертом издании «Язык программирования на C ++» Бьярне Страуструп пишет (§12.1.3):
К сожалению, для сохранения совместимости C, const игнорируется на самом высоком уровне тип аргумента. Например, это два объявления одной и той же функции:
blockquote>void f(int); void f(const int);
Итак, кажется, что, обратившись к некоторым другим ответам, это правило C ++ не было выбрано из-за неразличимости двух функций или других подобных рассуждений, но вместо этого как менее оптимальное решение для совместимости.
Действительно, на языке программирования D возможно иметь эти два перегрузки. Тем не менее, в противоположность тому, что могут предложить другие ответы на этот вопрос, непреднамеренная перегрузка предпочтительна, если функция вызывается с литералом:
void f(int); void f(const int); f(42); // calls void f(int);
Конечно, вы должны предоставить эквивалентную семантику для своих перегрузок , но это не относится к этому сценарию перегрузки с почти неотличимыми функциями перегрузки.