使用右值引用进行索引有什么好处?

时间:2019-04-18 01:39:47

标签: c++ containers move-semantics rvalue-reference

我想知道使用rvalue引用参数索引到容器对象(而不是const引用)是否有任何好处:

Foo::bar(T1&& i, T2&& x)
{
  m_data[i].emplace_back(std::move(x));
}

其中m_datastd::unordered_map<T1, std::vector<T2>>。对我来说,i的类型为const T1&似乎更自然,但是我对移动语义一无所知,无法知道T1&&是否有任何好处(假设T1和T2是重型类型。

编辑:在我的用例中,T1是std::pair<enums, std::string>,T2是自定义类的shared_ptr。

1 个答案:

答案 0 :(得分:1)

假设T1T2是模板参数,则最好在参数传递给其他函数时使用完美转发。

Foo::bar(T1&& i, T2&& x)
{
  m_data[std::forward<T1>(i)].emplace_back(std::forward<T2>(x)));
}

然后,T1T2是基本类型,POD类型还是复杂类都没有关系。左值引用或右值引用传递ix都没关系。