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

Can we convert a const vector<string> to vector<string> using const_cast?

如果很基础还请见谅。我喜欢使用 const_cast 进行转换。如果可能的话,任何人都可以分享这个例子。我要避免的另一种方法是迭代 const 向量并将其内容插入到新向量中。

const_cast 不会引入未定义的行为(即可以安全使用),只要您 const_casting 的变量最初未定义为 const或者如果它最初被定义为 const 你没有修改它。

如果牢记上述限制,那么您可以通过以下方式进行操作:

void foo(std::vector<std::string> const &cv) {
  auto &v = const_cast<std::vector<std::string>&>(cv);
  // ...
}

Live Demo

制作一个 non-const 给定向量的副本 const std::vector<X>& 你可以只写

void foo(const std::vector<std::string>& src) {
    std::vector<std::string> localcopy(src);
    ... localcopy can be modified ...
}

如果您只需要访问本地 read-write 副本而不是原始 src,则代码可以简化为

void foo(std::vector<std::string> localcopy) {
    ...
}

即您只需通过值 而不是通过引用传递向量:调用者传递的向量不会被被调用者修改,因为将在调用时隐式创建一个副本。