使用对索引的右值引用,有什么好处吗?
Using an rvalue reference to index, any benefits?
我想知道使用右值引用参数索引到容器对象而不是 const 引用是否有任何可能的好处:
Foo::bar(T1&& i, T2&& x)
{
m_data[i].emplace_back(std::move(x));
}
其中 m_data
是 std::unordered_map<T1, std::vector<T2>>
。 i
属于 const T1&
类型对我来说似乎更自然,但我对移动语义的了解还不够,无法知道 T1&&
是否有任何好处(假设 T1 和 T2是重型类型)。
编辑:在我的用例中,T1 是 std::pair<enums, std::string>
,T2 是 shared_ptr 到自定义 class。
假设T1
和T2
是模板参数,当你的参数传递给其他函数时最好使用完美转发。
Foo::bar(T1&& i, T2&& x)
{
m_data[std::forward<T1>(i)].emplace_back(std::forward<T2>(x)));
}
那么,T1
和T2
是基本类型、POD类型还是复杂类都没有关系。 i
和x
是左值引用还是右值引用都没有关系。
我想知道使用右值引用参数索引到容器对象而不是 const 引用是否有任何可能的好处:
Foo::bar(T1&& i, T2&& x)
{
m_data[i].emplace_back(std::move(x));
}
其中 m_data
是 std::unordered_map<T1, std::vector<T2>>
。 i
属于 const T1&
类型对我来说似乎更自然,但我对移动语义的了解还不够,无法知道 T1&&
是否有任何好处(假设 T1 和 T2是重型类型)。
编辑:在我的用例中,T1 是 std::pair<enums, std::string>
,T2 是 shared_ptr 到自定义 class。
假设T1
和T2
是模板参数,当你的参数传递给其他函数时最好使用完美转发。
Foo::bar(T1&& i, T2&& x)
{
m_data[std::forward<T1>(i)].emplace_back(std::forward<T2>(x)));
}
那么,T1
和T2
是基本类型、POD类型还是复杂类都没有关系。 i
和x
是左值引用还是右值引用都没有关系。