Нет, ты не можешь перегружать функцию только на основе того, передаётся ли параметр по значению или по ссылке.
Основная причина в том, что синтаксис вызова идентичен с точки зрения вызывающего кода. Когда ты вызываешь функцию, нет никакой синтаксической разницы между передачей значения или ссылки:
myFunction(x); // Работает одинаково для параметров по значению и по ссылке
Вызывающий код не может указать свои намерения, поэтому компилятор не может определить, какую перегруженную версию вызывать.
С точки зрения компилятора, эти два объявления считаются одной и той же функцией:
void process(int value);
void process(int& reference); // Ошибка компилятора: переопределение
Обе имеют идентичные сигнатуры с точки зрения того, как их вызывают.
Ты можешь перегружать функции на основе этих различий:
void func(int& x) против void func(const int& x)void func(int) против void func(double)void func(int) против void func(int, int)void func(int*) против void func(int&)Если тебе нужно разное поведение для семантики значений и ссылок, используй const-ссылки для параметров только для чтения или неконстантные ссылки для изменяемых параметров. Это позволит создать различимые для компилятора перегрузки.
Функция не может быть перегружена только на основе параметров по значению или по ссылке, потому что синтаксис вызова идентичен с точки зрения вызывающего кода.
Новый — ещё не проверен сообществом
Вы