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

时间:2016-01-25 07:22:30

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

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

2 个答案:

答案 0 :(得分:3)

制作一个给定<div class="vertical-text">Hello Vertical Texter!</div> <style> .vertical-text { background: #e23737 none repeat scroll 0 0; border: 1px solid #b52c2c; box-shadow: 2px -2px 0 rgba(0, 0, 0, 0.1); color: #fff; float: left; margin-left: 40px; padding: 10px; text-transform: uppercase; transform: rotate(90deg); transform-origin: left top 0; } </style> 的向量的非常量副本,你可以写

const std::vector<X>&

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

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

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

答案 1 :(得分:2)

const_cast不会引入未定义的行为(即,它可以安全使用),只要您const_cast的变量不是“{1}}最初定义为const,或者如果它最初定义为const,则您不会修改它。

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

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

Live Demo