私はstd::vector
の仕様を見ていて、reference
typedefがC++ 11のAllocator::reference
からvalue_type&
のC++ 11に変更されていることに気づいた。私はびっくりしたので、もっと深く見始めました。 CにおいてAllocator :: referenceを段階的に廃止するのはなぜですか?
++ 03§20.1.5[lib.allocator.requirements] X::reference
がT&
とX::const_reference
をT const&
であると定義されることが定義されているテーブル32があります。
しかし、C++ 11§17.6.3.5[allocator.requirements]には、reference
とconst_reference
が存在しないテーブル28があります。
次に、reference
を含まないC++ 11で追加された§20.6.8std::allocator_traits
があります。しかし、§20.6.9std::allocator
はそうです。
最後にあります§23.2.1[container.requirements.general]「T
のCONST左辺値」と「T
の左辺値」とX::const_reference
ことがX::reference
を定義します。
だから、私はアロケータの要件からreference
の除去を提案しているが、それはその背後にあるいずれかの根拠を言及していないことGoogleで検索し、この紙(1、2)を見つけました。しかし、変更に反対するLWG issueもあります。
また、私はその中で彼はreference
は彼がコンテナ要素、コンテナの要件とstd::vector<bool>
はコンテナではありませんどのようにポインタを取って話しているマシン固有のメモリレイアウトとHerb Sutter's postをカプセル化する方法を協議the interview with Alexander Stepanov発見しました。
だから、これについてどう思いますか? reference
は役に立ちましたか?その目的を果たしましたか?どのように "派手な"参照が標準に適合するのですか?これを完全に排除し、より厳格なコンテナ要件を満たし、std::vector<bool>
を非難する大胆な動きですか?
すてきな質問 – David
いいえ、あまり太字ではありません。誰かがstd :: vectorをインスタンス化しようとするとビルドが中断します。 –