容器

时间:2016-01-05 22:39:04

标签: c++ stl const-correctness

经过多年盲目地接受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访问器是否仍然按照它们的方式定义?

1 个答案:

答案 0 :(得分:0)

  

为了澄清,似乎应该有一个类似于矢量的容器,其中const只意味着用户不能改变容器的大小,但容器中的元素是可变的。

那是std::array。您在编译时设置大小。为了在构造函数时设置大小,建议使用dynarray