经过多年盲目地接受std::vector<T>::operator[] const
返回const_reference
的事实,但是,鉴于const如何为智能指针工作,我现在开始想知道为什么它和STL的其余部分容器就是这样设计的。似乎const std::vector
的“constness”既适用于向量及其元素,而对于智能指针,“constness”仅适用于指针而不适用于它所指向的元素。
为了澄清,似乎应该有一个类似矢量的容器const
只是意味着用户不能改变容器的大小,但容器中的元素是可变的。我的主要问题是:是否有某些东西可以阻止这种类型的容器“const正确”?
似乎通过添加一个额外的间接层(例如std::vector<std::unique_ptr<T>> const
)来实现这一点,有一些hackish变通方法,但我正在寻找一些在维护方面不那么尴尬的东西。
顺便说一句,如果在STL容器之前将智能指针合并到语言中,那么const访问器是否仍然按照它们的方式定义?
答案 0 :(得分:0)
为了澄清,似乎应该有一个类似于矢量的容器,其中const只意味着用户不能改变容器的大小,但容器中的元素是可变的。
那是std::array
。您在编译时设置大小。为了在构造函数时设置大小,建议使用dynarray
。