の仕様を調べていて、 typedef がC++03 からC++11 に変更されstd::vector
ていることに気付きました。びっくりしたので、もっと深く調べてみました。reference
Allocator::reference
value_type&
C++03 §20.1.5 [lib.allocator.requirements] には、 であると定義され、 であると定義されているテーブル 32がX::reference
あります。T&
X::const_reference
T const&
ただし、C++11 §17.6.3.5 [allocator.requirements] には、reference
とconst_reference
が欠落しているテーブル 28 があります。
std::allocator_traits
次に、 を含まない C++11 に§20.6.8 を追加しましたreference
。しかし、§20.6.9std::allocator
はそうです。
最後に、§23.2.1 [container.requirements.general] があり、「の左辺値」および「の定数左辺値」であると定義X::reference
されてT
いX::const_reference
ますT
。
それで、私はグーグルで検索して、アロケーター要件からの削除を提案するこの論文( 1、2reference
)を見つけましたが、その背後にある理論的根拠については言及していません。しかし、変更に反対するLWG の問題もあります。
また、マシン固有のメモリ レイアウトをカプセル化する方法について語っている Alexander Stepanov とのインタビューと、コンテナー要素へのポインターの取得、コンテナーの要件、コンテナーではない方法について語っているHerb Sutter の投稿を見つけました。reference
std::vector<bool>
それで、あなたはこれらすべてについてどう思いますか?役に立ちましたかreference
、それは目的を果たしましたか? 「派手な」参照は標準にどのように適合しますか? これは、それらを完全に排除し、より厳格なコンテナー要件を作成し、廃止するという大胆な動きstd::vector<bool>
ですか?