[英]Do I need to std::move an std::initializer_list?
我想通过包装器将列表初始化的向量传递给工作人员 function。 我不需要原始 function(主)中的值,所以我应该移动它吗?
该文档指出:
复制 std::initializer_list 不会复制底层对象。
所以成本可能是最小的,但是移动它仍然有优势,还是列表复制省略并且向量直接列表初始化?
(编译)代码:
#include <iostream>
#include <vector>
void worker(std::vector<int>&& some_ints)
{
std::cout << "I hope my ints arrive here without further overhead :)" << std::endl;
}
void wrapper(std::vector<int>&& some_ints)
{
worker(std::move(some_ints));
}
int main()
{
wrapper( { 1, 5 } ); // <-- std::move here?
}
支撑初始化列表不是std:initializer_list
。
这里:
wrapper( { 1, 5 } );
重载解析找到void wrapper(std::vector<int>&&)
重载,这是调用的可行重载:创建临时std::vector<int>
object (通过列表初始化通过std::initializer_list<T>
std::vector<T>
> 的构造函数)绑定到wrapper
function 的右值引用参数。
试图移动一个支撑初始化列表
wrapper(std::move({ 1, 5 })); // error
是非法的(不能推断出std::move<T>(T&&)
T
模板中的 T )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.