Тип возврата не является основой перегрузки функции.
Перегрузка функций возможна только по одному из следующих критериев:
- Нет аргументов
- Тип аргументов &
- Последовательность аргументов
Тип возврата может игнорироваться вызывающей стороной, и, следовательно, он не является допустимым критерием перегрузки функции.
Сказав выше, передача по значению и передача ссылки создаст неоднозначность для компилятора. Например:
void doSomething(int i)
{
}
void doSomething(int &i)
{
}
int main()
{
int val = 10;
doSomething(val); //Ambiguous
}
Здесь компилятор не может определить, как передать val
какой версии doSomething()
. Он может сделать допустимый вызов функции для любой из версий, поэтому он взывает о помощи во время компиляции (поскольку это статическое связывание) и помечает вызовы как неоднозначные.
В случае, например, ваш. Это выбор / предпочтение, чтобы переименовать функции или передать аргумент указателя, что сделает две функции перегруженными (одно и то же имя, но разные типы аргументов). Тем не менее, важно принять во внимание требование и действие, которое будет выполнять функция при выборе предпочтения. Лично я бы не выбрал указатель просто ради перегрузки. Если мне нужно переустановить аргумент или указать его аргумент на разные переменные, то имеет смысл выбрать аргумент-указатель.
Простой способ - просто иметь два разных имени функции. Нет никаких накладных расходов, и это так же эффективно, как и любой другой вызов функции.