多年来,我们一直盲目地认为
为了澄清,似乎应该有一个类似向量的容器,其中
看起来有一些hackish解决方法,通过添加额外的间接层(例如
顺便说一下,如果在STL容器之前将智能指针合并到语言中,今天的const访问器还会被定义成这样吗?
std::vector<T>::operator[] const
返回const_reference
。但考虑到智能指针中const的工作方式,我开始怀疑为什么STL容器会被设计成这样。似乎一个const std::vector
的"constness"适用于向量本身和其中的元素,而对于智能指针,"constness"仅适用于指针而不是所指向的元素。为了澄清,似乎应该有一个类似向量的容器,其中
const
只意味着用户无法更改容器的大小,但容器中的元素是可变的。我的主要问题是:是否有任何因素阻止将这种类型的容器定义为“const correct”?看起来有一些hackish解决方法,通过添加额外的间接层(例如
std::vector<std::unique_ptr<T>> const
)来实现这一点,但我想找到一些在维护方面不那么笨拙的东西。顺便说一下,如果在STL容器之前将智能指针合并到语言中,今天的const访问器还会被定义成这样吗?
std::vector<T>::operator[]
返回一个引用。而std::vector<T>::operator[] const
则返回一个常量引用。 - Marshall Clow