46

std::initializer_list呼び出された を受け入れる関数を作成していて、その関数がの要素listへのランダム アクセスを必要とするとします。の代わりにlist書くと便利です。では、なぜの定義を提供しないのですか?list[i]list.begin()[i]std::initializer_listoperator[]

operator[]復帰const T&が明確に定義されていないケースは考えられません。は明らかにランダム アクセス イテレータである にstd::initializer_list<T>::iteratorエイリアスされているため、効率はここでは問題ではないようです。const T*

4

2 に答える 2

18

The C++ Programming Language, 4th Edition のセクション 17.3.4.2 (p. 497) の Bjarne Stroustrup によると:

残念ながら、initializer_list は添え字を提供しません。

それ以上の理由は与えられていません。

私の推測では、次の理由のいずれかです。

  1. それは省略です、または
  2. initializer_list クラスは配列で実装されており、安全なアクセスを提供するために境界チェックを行う必要があるため、そのインターフェイスが提供されている場合は、より簡単に安全でない方法で使用される可能性があります。または
  3. 標準アルゴリズムの反復パラダイムと一致するようにする、または
  4. initializer_lists はその性質上アドホックであるため、直接アドレス指定することでエラーが発生する可能性が高くなります

2と4の音がちょっと弱い。3もそうです。私のお金は1にあります。

于 2013-07-24T00:06:42.857 に答える