所以我正在查看规范std::vector
并注意到reference
typedef 从Allocator::reference
C++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>
吗?