[使用容器时在不同编译器上的RVO

问题描述 投票:0回答:1

我在c ++ 17上有以下代码

template<typename T>
std::vector<T*> getPointerVector(std::vector<T> base) {
  auto out = std::vector<T*>();
  for (auto& t : base) {
      out.push_back(&t);
  }
  return out;
}

据我所知,RVO应该加入,并防止复制返回的向量。但是,当我使用GCC时,一切正常,使用msvc则不能,并且实际上已复制了向量。有什么解释吗?谢谢!

编辑:调试时,请确保函数中和调用方的向量在内存中的引用相同。对于在debian测试中的gcc 8.3来说是正确的,而在Visual Studio 19.4上的msvc则不是这样。

我在c ++ 17 template上有以下代码std :: vector getPointerVector(std :: vector base){auto out = std :: vector ();对于(auto&t:base){...

c++ gcc visual-c++ rvo
1个回答
0
投票

显然您的Visual Studio版本不这样做。

© www.soinside.com 2019 - 2024. All rights reserved.