Рассмотрим следующие определения функций:
void fun(int& a)
{
cout << "Ra" << endl;
}
А также:
void fun(int a)
{
cout << "a" << endl;
}
Теперь, когда я вызываю функцию следующим образом:
int a;
fun(a);
Вызов неоднозначен, поскольку компилятор не может решить, следует ли вызывать по значению или по ссылке.
Мой вопрос:
Когда я пишу что-то вроде этого:
int a;
int &b = a;
fun(b);
Это снова дает двусмысленность. Поскольку b является ссылкой, почему бы не вызвать тот, где аргумент является ссылкой.
Я уже видел ответы на этот вопрос: Перегрузка функции на основе значения по сравнению с Const Reference, но это не отвечает на мой вопрос. Пожалуйста помоги.
int&
b
в своем примере? Совершенно лишнее. - person Deduplicator   schedule 15.11.2014b
является lvalue типаint
. И обе функции одинаково хорошо подходят для этого. (Считайте это не ссылкой, а просто псевдонимом — другим именем — дляa
. Почти во всех случаях это так. (Исключение дляdecltype
.)) - person Deduplicator   schedule 15.11.2014