Предположим, у меня есть что-то простое:
void f(int a){...}
int main()
{
f(3);
return 0;
}
Как происходит инициализация на немного более низком уровне абстракции, когда мы вызываем f (3)? Создается ли временный объект со значением 3 или он просто инициализируется путем инициализации копирования?
В первую очередь причина, по которой это было задано, была, когда я обнаружил, что в этом коде:
void f(int a){...}
void f(int&& a){...}
int main()
{
f(3);
return 0;
}
... Я получаю ошибку, говоря, что это неоднозначно. Поскольку я совершенно уверен, что при вызове функции f (int && a) мы получим создание временного объекта, который получает расширение на всю жизнь со ссылкой a, я бы также сказал, что вызов f (int a) также вызывает создание временный характер. Иначе, не должен ли компилятор выбрать, чтобы f (int a) был более эффективным?
Также есть книга, которая может элегантно освещать эту топику c?