3

概念ではなくstd::initializer_list<T>::iteratorネイキッド ポインターとして定義されるのはなぜですか?T const*random_access_iterator

4

1 に答える 1

5

その理由は、おそらく標準からのこの小さな一口からです

セクション18.9

タイプ initializer_list のオブジェクトは、タイプ const E のオブジェクトの配列へのアクセスを提供します。initializer_list は、8.5.4 で指定されている初期化リストを実装するために使用されます。初期化子リストをコピーしても、基になる要素はコピーされません。—終わりのメモ]

これは、コピーされたときの initializer_lists が値のセマンティクスではなくポインターのセマンティクスを持つことを示しています。これがおそらく、それらのイテレーターが直接ポインターであり、「random-access-iterator」タイプにラップされていない理由です。

私の知る限り、これは値のセマンティクスではなくポインターのセマンティクスを持つ唯一の標準的な「コンテナ」です (ここで引用符に注意してください)。

于 2013-07-08T01:32:32.613 に答える