Que signifie prendre un nombre variable d'arguments par référence? Cela signifie-t-il que chacun des arguments est passé par référence?C++ 0x passer des arguments à des fonctions de modèle variées
Considérons par exemple les fonctions suivantes, qui effectue un traitement sur chacun de ses arguments:
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...);
}
Maintenant, si je:
int a, b, c;
...
f(a, b, c);
Est-ce que ce résultat instanciations de f (int &, int &, int &), f (int &, int &), et finalement f (int &)?
Que diriez-vous si je change le deuxième paramètre de f() pour être "Tail ..." au lieu de "Tail & ...". Est-ce que les instanciations seront maintenant f (int &, int, int), f (int &, int), et finalement f (int &), ce qui signifie que par ex. 'c' sera copié par les deux premiers appels et le dernier appel modifiera une copie au lieu de l'original?
Quelqu'un pourrait-il pointer vers une bonne référence qui explique comment exactement les modèles variés fonctionnent?