【发布时间】:2016-04-09 22:02:01
【问题描述】:
在多年盲目接受std::vector<T>::operator[] const 返回const_reference 的事实之后,但是,鉴于 const 对智能指针的作用,我现在开始怀疑为什么它和其他 STL 容器被设计成这样大大地。 const std::vector 的“常量”似乎同时应用于向量及其元素,而对于智能指针,“常量”仅适用于指针而不是它指向的元素。
为了澄清,似乎应该有一个类似矢量的容器,其中const 只是意味着用户不能更改容器的大小,但容器中的元素是可变的。我的主要问题是:有什么东西可以阻止这种类型的容器“const 正确”吗?
似乎通过添加额外的间接层(例如std::vector<std::unique_ptr<T>> const)来实现这一点,有几个hackish解决方法,但我正在寻找在维护方面不那么尴尬的东西。
顺便说一句,如果在 STL 容器之前将智能指针合并到语言中,那么 const 访问器是否仍会像今天一样定义?
【问题讨论】:
-
您可以定义自己的类,该类使用组合间接作用于
mutable std::vector,并通过公共成员函数确保 const 正确性(在您的意义上)。 -
std::vector<T>::operator[]返回一个引用。std::vector<T>::operator[] const返回一个常量引用。 -
@Marshall Clow 不知何故脱离了我的原始草稿。我会重新添加它。谢谢。
标签: c++ stl const-correctness