我需要std::移动std::initializer_list吗



我想通过包装器将列表初始化的向量传递给辅助函数。我不需要原始函数(main(中的值,所以我应该移动它吗?

文件指出:

复制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?
}

一个有支撑的init列表不是std:initializer_list

此处:

wrapper( { 1, 5 } );

重载解析找到void wrapper(std::vector<int>&&)重载,这是调用的可行重载:创建一个临时std::vector<int>对象(通过std::vector<T>std::initializer_list<T>构造函数进行列表初始化(,该对象绑定到wrapper函数的右值引用参数。

试图移动一个支持的初始化列表

wrapper(std::move({ 1, 5 }));  // error

是非法的(无法推导出std::move<T>(T&&)函数模板中的T(。

相关内容

  • 没有找到相关文章

最新更新