std::vector
的规范,注意到C++03中reference
typedef从Allocator::reference
改变为C++11中的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
。接下来我们有C++11中添加的§20.6.8
std::allocator_traits
,它不包括reference
。但是§20.6.9 std::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>
的大胆举动吗?