【发布时间】:2016-01-25 07:22:30
【问题描述】:
如果它是非常基本的,请原谅我。我喜欢使用 const_cast 进行转换。如果可能的话,任何人都可以分享这个例子。我要避免的其他方法是迭代 const 向量并将其内容插入新向量。
【问题讨论】:
-
如果你不想修改原来的那你为什么需要
const_cast?
标签: c++ vector casting type-conversion const-cast
如果它是非常基本的,请原谅我。我喜欢使用 const_cast 进行转换。如果可能的话,任何人都可以分享这个例子。我要避免的其他方法是迭代 const 向量并将其内容插入新向量。
【问题讨论】:
const_cast?
标签: c++ vector casting type-conversion const-cast
const_cast 不会引入未定义的行为(即,它可以安全使用),只要您的变量 const_casting 最初没有定义为 const 或者如果它最初定义为 @ 987654325@你没有修改它。
如果牢记上述限制,那么您可以通过以下方式进行操作:
void foo(std::vector<std::string> const &cv) {
auto &v = const_cast<std::vector<std::string>&>(cv);
// ...
}
【讨论】:
在给定 const std::vector<X>& 的情况下制作一个向量的非常量副本,您可以直接写
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) {
...
}
即您只需按值而不是通过引用传递向量:调用者传递的向量不会被被调用者修改,因为将在调用时隐式生成副本。
【讨论】: