如果它非常基本,请原谅我。我喜欢使用 const_cast 进行转换。如果有可能请任何人分享这个例子。我要避免的其他方法是迭代const向量并将其内容插入到新的向量中。
答案 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);
// ...
}