LINUX.ORG.RU

Перегрузка по значению и по ссылке

 , , ,


0

4

День добрый! Скажите пожалуйста, где в стандарте C++ описано, что перегруженная функция Foo(), принимающая аргумент по неконстантной ссылке может работать так же по значению

void Foo(int val) {
    // todo
}

void Foo(int& ref) {
    // todo
}

int main() {
    int x = 20;
    Foo(10);
    Foo(x);
    return 0;

}

В данном случае для компилятора ситуация ambiguous.

Ответ на: комментарий от real_pacan

Ведь явно по значению же передаю

А как по твоему будет выглядеть передача по ссылке? Чтобы компилятор мог отличить передачу по значению и по ссылке...

anonymous ()
Ответ на: комментарий от anonymous

А как тогда по-твоему явно передать по ссылке?

std::ref

Кстати, если так сделать, то неоднозначность пропадет.

anonymous ()
Ответ на: комментарий от real_pacan

Как уже сказали синтаксис передачи переменной по значению совпадает с синтаксисом передачи переменной по ссылке. Явной передачи по ссылке в языке нет (по значению, может std::move() может за это сойти).

xaizek ★★★★★ ()
Ответ на: комментарий от XMs

Что никаким образом не повлияет на компилируемость примера ТС. Переменные разлагаются до lvalue-reference и так, отсюда и проблема, если сделать это явно, то ничего не меняется.

xaizek ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.