我有一个类型为 const std::vector<const Array*> &objects
的 vector 它作为参数传递给方法。
我想 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 限定的。至此,一切都已明确定义;它只是修改一个 const object 是 UB,所以要小心。
关于c++ - 常量转换 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077259/