我想知道使用rvalue引用参数索引到容器对象是否有任何可能的好处,而不是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。
假设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
是否通过左值参考或右值参考传递无关紧要。