3

参照によって可変数の引数を取るとはどういう意味ですか?それぞれの引数が参照によって渡されるということですか?

たとえば、各引数に対していくつかの処理を実行する次の関数について考えてみます。

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()の2番目のパラメーターを「Tail&...」ではなく「Tail...」に変更した場合はどうでしょうか。インスタンス化はf(int&、int、int)、f(int&、int)、最後にf(int&)になります。つまり、たとえば「c」は最初の2つの呼び出しでコピーされ、最後の呼び出しで変更されます。オリジナルの代わりにコピーしますか?

誰かが可変個引数テンプレートがどのように機能するかを説明する良いリファレンスを指摘できますか?

4

1 に答える 1

2

あなたの直感は正しいと思います。現在のドラフトISO仕様からすべての詳細を読むことができ(まだ完成していません)、GCC>4.3でテストすることができます。

于 2010-07-16T07:03:44.223 に答える