将向量<T*>移动到向量<const T*>

Tim*_*mmm 9 c++ const vector

是否可以将a移动vector<T*>到a vector<const T*>而不复制它而不依赖reinterpret_cast<>?即

vector<int*> get() {
   return ...;
}

vector<const int*> getConst() {
   return whatgoeshere(get());
}
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 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;
}
Run Code Online (Sandbox Code Playgroud)

填充逻辑的一个真实来源.虽然两个原始功能是相同的,但它可以忽略不计.此外,在一个理智的实现它不会做任何多余的副本,因为RVO是惊人的.