使用rvalue引用索引,有什么好处?

问题描述 投票:1回答:1

我想知道使用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。

c++ containers move-semantics rvalue-reference
1个回答
1
投票

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

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

然后,T1T2是基本类型,POD类型还是复杂类都无关紧要。 ix是否通过左值参考或右值参考传递无关紧要。

© www.soinside.com 2019 - 2024. All rights reserved.