我们可以使用 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_cast
ing 的变量最初未定义为 const
或者如果它最初被定义为 const
你没有修改它。
如果牢记上述限制,那么您可以通过以下方式进行操作:
void foo(std::vector<std::string> const &cv) {
auto &v = const_cast<std::vector<std::string>&>(cv);
// ...
}
制作一个 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) {
...
}
即您只需通过值 而不是通过引用传递向量:调用者传递的向量不会被被调用者修改,因为将在调用时隐式创建一个副本。
如果很基础还请见谅。我喜欢使用 const_cast 进行转换。如果可能的话,任何人都可以分享这个例子。我要避免的另一种方法是迭代 const 向量并将其内容插入到新向量中。
const_cast
不会引入未定义的行为(即可以安全使用),只要您 const_cast
ing 的变量最初未定义为 const
或者如果它最初被定义为 const
你没有修改它。
如果牢记上述限制,那么您可以通过以下方式进行操作:
void foo(std::vector<std::string> const &cv) {
auto &v = const_cast<std::vector<std::string>&>(cv);
// ...
}
制作一个 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) {
...
}
即您只需通过值 而不是通过引用传递向量:调用者传递的向量不会被被调用者修改,因为将在调用时隐式创建一个副本。