在lambda中放入std::move真的有必要吗?
Is putting std::move inside a lambda really necessary here?
我真的必须在lambda中封装std::move调用吗?
std::list<std::wstring> srcData = GetData(); // implementation not important
std::vector<std::wstring> dstData;
dstData.reserve(srcData.size());
std::transform(std::begin(srcData), std::end(srcData), std::back_inserter(dstData),
[](std::wstring& guid) -> std::wstring { return std::move(guid); });
srcData.clear();
我对lambda和右值引用还是个新手,所以最初我尝试了:
std::transform(std::begin(srcData), std::end(srcData),
std::back_inserter(dstData), &std::move<std::wstring>);
不工作
我必须把移动放在lambda内,还是我错过了一些明显的东西?
另一种方法是使用move迭代器:
std::vector<std::wstring> dstData(std::make_move_iterator(srcData.begin()),
std::make_move_iterator(srcData.end()));
或者使用move
算法:
std::move(srcData.begin(), srcData.end(), std::back_inserter(dstData));
既然被要求了,下面是你可以强迫原始提议工作的方法:
int main()
{
std::transform(std::begin(srcData),
std::end(srcData),
std::back_inserter(dstData),
static_cast<std::wstring&&(*)(std::wstring&)>(&std::move<std::wstring&>));
}
相关文章:
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- Usages of std::move
- 在C++中对T*类型执行std::move的意外行为
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 关于std::move的使用,是否有编译警告
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 通过实例理解std::move及其目的
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- 字节真的是最小可寻址单元吗
- 返回一个带有 std::move 的对象并链接函数
- '[](std::list& list)<int>{return std::move(list)}(list)' 是否保证将 'list' 留空?
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- 如何在 std::vector 中找到<bool>哪些索引是真的?
- std::string 的对象真的可以移动吗?
- 在这种情况下,我真的复制了字节还是复制了字符?
- "std::forward"和"std::move"真的不生成代码吗?
- 如果真的需要std::move,我们应该什么时候声明右值refs
- 在lambda中放入std::move真的有必要吗?
- 在按值传递的重成员的构造函数初始化列表中是否真的需要std::move ?