【问题标题】:Can we convert a const vector<string> to vector<string> using const_cast?我们可以使用 const_cast 将 const vector<string> 转换为 vector<string> 吗?
【发布时间】:2016-01-25 07:22:30
【问题描述】:

如果它是非常基本的,请原谅我。我喜欢使用 const_cast 进行转换。如果可能的话,任何人都可以分享这个例子。我要避免的其他方法是迭代 const 向量并将其内容插入新向量。

【问题讨论】:

  • 如果你不想修改原来的那你为什么需要const_cast

标签: c++ vector casting type-conversion const-cast


【解决方案1】:

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

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

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

Live Demo

【讨论】:

  • 不修改强制转换的变量也不是UB。
  • 谢谢。这就是我要找的。​​span>
【解决方案2】:

在给定 const std::vector&lt;X&gt;&amp; 的情况下制作一个向量的非常量副本,您可以直接写

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

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

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

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

【讨论】:

  • 谢谢。这很有帮助。有什么方法可以从 src 中删除 const 标志(我们使用 const_cast 的方式)?这样我们就可以使用相同的 src 变量作为非成本向量。我只是在想是否有办法避免在 localcopy 变量中复制并使用相同的 src 变量?
猜你喜欢
  • 2014-05-16
  • 2013-03-15
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多