繁体   English   中英

const_cast std :: vector

[英]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);

现在objobjects引用同一个对象,但是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

但更重要的问题是: 为什么 如果objectsconst ,则不应该修改它。

您不必在此处进行转换,因为您无论如何都是复制构造内容,并且复制构造函数接受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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM