使用对索引的右值引用,有什么好处吗?

Using an rvalue reference to index, any benefits?

我想知道使用右值引用参数索引到容器对象而不是 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 到自定义 class。

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

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

那么,T1T2是基本类型、POD类型还是复杂类都没有关系。 ix是左值引用还是右值引用都没有关系。