所以我正在查看规范std::vector并注意到referencetypedef 从Allocator::referenceC++03 到value_type&C++11 中的更改。我很惊讶,所以我开始深入研究。
在 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] 中,表 28 中缺少reference和。const_reference
接下来,我们std::allocator_traits在 C++11 中添加了 §20.6.8,其中不包括reference. 但是§20.6.9std::allocator可以。
最后,还有 §23.2.1 [container.requirements.general] 定义X::reference为“lvalue of T”和X::const_reference“const lvalue of T”。
所以,我在谷歌上搜索并发现了这篇论文(1 , 2),它建议reference从分配器要求中删除,但它没有提到它背后的任何理由。但也有一个反对改变的LWG 问题。
此外,我还找到了对 Alexander Stepanov 的采访,其中他谈到了如何reference封装特定于机器的内存布局,以及Herb Sutter 的帖子,其中他谈到了将指针指向容器元素、容器要求以及如何std::vector<bool>不是容器。
那么,您如何看待这一切?有用吗reference,有没有达到目的?“花哨”的参考文献如何符合标准?这是彻底消除它们、制定更严格的容器要求并弃用它们的大胆举措std::vector<bool>吗?