Что значит принимать переменное число аргументов по ссылке?Означает ли это, что каждый из аргументов передается по ссылке?
Рассмотрим, например, следующие функции, которые выполняют некоторую обработку каждого из своих аргументов:
void f() // base case for recursion
{
}
template <typename Head, typename ... Tail>
void f(Head& head, Tail&... tail)
{
// Do processing on head
process(head);
// Now recurse on rest of arguments
f(tail...);
}
Теперь, если у меня есть:
int a, b, c;
...
f(a, b, c);
Приведет ли это к созданию экземпляров f (int &, int &, int &), f (int &, int &) и, наконец, f (int &)?
Как насчет того, чтобы изменить второй параметрдля f () быть "Хвост ..." вместо "Хвост & ...".Будут ли экземпляры теперь f (int &, int, int), f (int &, int) и, наконец, f (int &), означая, что, например, 'c' будет скопировано через первые два вызова, а последний вызов будет модифицироватьскопировать вместо оригинала?
Может ли кто-нибудь указать на хороший справочник, который объясняет, как именно работают шаблоны с переменными числами?