我想知道使用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。
答案 0 :(得分:1)
假设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
都没关系。