[英]Modifying element of const std::vector<T> via const_cast
[英]const_cast std::vector
我有一个类型为const std::vector<const Array*> &objects
,它作为参数传递给方法。
我想要const_cast,但由于某种原因我不能这样做。 我努力了:
vector<const Array*> obj = const_cast<const std::vector<const Array*> >(objects);
和其他一些方式,但它一直在抱怨。
有任何想法吗 ?
首先, 不要 。 更改函数的签名以获取非const引用,您可以通过执行以下操作冒险UB:
const std::vector<const Array*> myData = /* fill */;
yourFunction(myData); // try to modify my stuff and you get UB!
现在,如果你仍然相信你必须,无论出于何种原因(如遗留API),它就是这样做的:
vector<const Array*>& obj = const_cast<std::vector<const Array*>&>(objects);
现在obj
和objects
引用同一个对象,但是obj
不是const限定的。 在这一点上,一切都是明确的; 它只修改一个UB的const 对象 ,所以要小心。
我需要将它传递给需要迭代它的函数(它不做任何修改)
使用const_iterator
。
您想将const std::vector<const Array*>
转换为const std::vector<const Array*>
吗? 他们不是一样的。 如果要删除const:
std::vector<const Array*> obj = const_cast<std::vector<const Array*> >(objects);
// |
// no const
但更重要的问题是: 为什么 ? 如果objects
是const
,则不应该修改它。
您不必在此处进行转换,因为您无论如何都是复制构造内容,并且复制构造函数接受const
引用。
说啊:
std::vector<const Array*> obj = objects;
如果你确定要做什么,这里是如何获得向量的非const引用。
const std::vector<const Array*> &objects;
vector<const Array*>& obj = const_cast<std::vector<const Array*>& >(objects);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.