5

初期化リストを使用するのは初めてですが、他のstlコンテナと同じように機能するかどうか疑問に思っています。つまり、値をコピーするということですか?私がやろうとしているのは、次のような単純なmin()関数です。

template <class T> T& minArgs(const std::initializer_list<T&>& Arguments)
{
    const T* Smallest = Arguments.begin();
    for (const T* I = begin(Arguments); I != end(Arguments); ++I)
    {
        if (*I < *Smallest) Smallest = I;
    }
    return *Smallest;
}

ただし、関数を呼び出すと、GCCから次のようになります。

error: 'const' qualifiers cannot be applied to 'int&'

私はこれをいじってみましたが、initializer_listsは私が望むことをしないかもしれません。非POD引数も除外する関数が必要です。va_listはより良い代替手段でしょうか?

ありがとう!

4

1 に答える 1

3

試してみると、これらのエラーが発生します。それでも、参照の無意味な使用を取り除くと、すべてが機能します。

std::initializer_list参照ではなく、値を格納します。const std::initializer_list<T> &ではなくを服用する必要がありますconst std::initializer_list<T&> &

私がやろうとしているのは、参照によって任意の数の引数を取り、それらの最大のものへの参照を返す関数を書くことだけです。[...] これは initializer_lists で可能ですか?

No.std::initializer_listであり、参照ではありません。しかし、参照ではなく値で項目を取得できない理由はわかりません。std::minまたは、もっと要点を言えば、初期化子リストを取ることができる を使用しないのはなぜですか?

于 2012-11-06T03:06:15.253 に答える