我在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上有以下代码
显然您的Visual Studio版本不这样做。