我有一个带有类型的向量,const std::vector<const Array*> &objects
它作为参数传递给该方法。
我想 const_cast 但由于某种原因我不能这样做。我试过了:
vector<const Array*> obj = const_cast<const std::vector<const Array*> >(objects);
和其他一些方式,但它一直在抱怨。
有任何想法吗 ?
我有一个带有类型的向量,const std::vector<const Array*> &objects
它作为参数传递给该方法。
我想 const_cast 但由于某种原因我不能这样做。我试过了:
vector<const Array*> obj = const_cast<const std::vector<const Array*> >(objects);
和其他一些方式,但它一直在抱怨。
有任何想法吗 ?
首先,不要。更改函数的签名以获取非常量引用,这样做会冒 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
.
您想将 aconst std::vector<const Array*>
转换为 aconst 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 std::vector<const Array*> &objects;
vector<const Array*>& obj = const_cast<std::vector<const Array*>& >(objects);