我有一个类型为const std::vector<const Array*> &objects
的向量,它作为参数传递给方法。
我想要const_cast,但由于某些原因我不能这样做。我试过了:
vector<const Array*> obj = const_cast<const std::vector<const Array*> >(objects);
和其他一些方式,但它一直在抱怨。
有什么想法吗?
答案 0 :(得分:5)
首先,不要。更改函数的签名以获取非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 对象,所以要小心。
答案 1 :(得分:1)
我需要将它传递给需要迭代它的函数(它不做任何修改)
使用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
,则不应修改它。
答案 2 :(得分:1)
您不必在此处进行转换,因为您无论如何都是复制构造内容,并且复制构造函数接受const
引用。
请说:
std::vector<const Array*> obj = objects;
答案 3 :(得分:1)
如果你确定要做什么,这里是如何获得向量的非const引用。
const std::vector<const Array*> &objects;
vector<const Array*>& obj = const_cast<std::vector<const Array*>& >(objects);