是否可以将vector<T*>
移至vector<const T*>
而无需复制,而无需依赖reinterpret_cast<>
?即。
vector<int*> get() {
return ...;
}
vector<const int*> getConst() {
return whatgoeshere(get());
}
答案 0 :(得分:6)
我将从另一个角度攻击这个。并解决可能的设计问题。你没有指定...
中的内容,但假设get
填充了一个向量然后返回它,我的视图中的解决方案就是提升在两个功能。
template<typename Int>
void do_get(std::vector<Int*>& v) {
// Populate v
}
auto get() {
std::vector<int*> ret;
do_get(ret);
return ret;
}
auto getConst() {
std::vector<const int*> ret;
do_get(ret);
return ret;
}
填充逻辑的一个真实来源。虽然两个原始功能相同,但它可以忽略不计。此外,在一个理智的实施中,它不会做任何多余的副本,因为RVO是惊人的。
答案 1 :(得分:4)
否强>
虽然T*
可以简单地转换为const T*
,但T*
的容器与const T*
的容器没有“关联”,所以根本就没有做你要求的功能。
还要考虑这样的功能可能假设将int**
分配给const int**
,这是不允许的(没有特殊情况提供程序员打算将此分配作为一部分进行交换操作,据我所知)。
此外,reinterpret_cast
只会对这些事实进行黑客攻击,使您的程序行为不明确。
你有三个选择: