2

我有一个带有类型的向量,const std::vector<const Array*> &objects它作为参数传递给该方法。

我想 const_cast 但由于某种原因我不能这样做。我试过了:

vector<const Array*> obj = const_cast<const std::vector<const Array*> >(objects);

和其他一些方式,但它一直在抱怨。

有任何想法吗 ?

4

4 回答 4

5

首先,不要。更改函数的签名以获取非常量引用,这样做会冒 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对象,所以要小心。

于 2012-08-22T16:15:54.657 回答
1

我需要将它传递给一个需要对其进行迭代的函数(它不需要任何修改)

使用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

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

于 2012-08-22T16:14:28.260 回答
1

您不必在此处强制转换,因为无论如何您都在复制构造内容,并且复制构造函数接受const引用。

说啊:

std::vector<const Array*> obj = objects;
于 2012-08-22T16:17:50.577 回答
1

如果您确定要做什么,这里是如何获取对向量的非常量引用。

const std::vector<const Array*> &objects;

vector<const Array*>& obj = const_cast<std::vector<const Array*>& >(objects);
于 2012-08-22T16:20:01.100 回答