c++ - 常量转换 std::vector

标签 c++ const-cast

我有一个类型为 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);

现在 objobjects 指的是同一个对象,但是 obj 不是 const 限定的。至此,一切都已明确定义;它只是修改一个 const object 是 UB,所以要小心。

关于c++ - 常量转换 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077259/

相关文章:

c++ - 在为基于文本的RPG游戏制作 list 时遇到困难

c++ - 调用 std::set<Type*>::find 时避免 const_cast

c++ - 我们可以使用 const_cast 将 const vector<string> 转换为 vector<string> 吗?

c++ - 为什么 const_cast 和 static_cast 到 const 引用没有效果?

java - 如何从 JNI 中的线程内部调用 JAVA 方法

c++ - lexical_cast strtof strtold 失去准确性?

c++ - 是否可以将引用类型别名与指针运算符一起使用来声明对指针的引用?

c++ - 在 Windows 上编译 libupnp

c++ - 将指向常量指针的指针传递给字节数组的语义冲突

c++ - "this"指针上的 const_cast 是未定义的行为吗?