【发布时间】:2019-04-18 01:39:46
【问题描述】:
我想知道使用右值引用参数来索引容器对象而不是 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是什么,但总的来说,没有任何区别。 -
谢谢!为什么说取决于T1?
-
因为确实如此。根据
m_data类型的operator[]重载接受的参数,可能会发生也可能不会发生隐式转换。 -
@SamVarshavchik 假设 m_data 是 std::unordered_map
。 -
@pooya13:你的意思可能是
std::unordered_map<T1, std::vector<T2>>(代表emplace_back)。
标签: c++ containers move-semantics rvalue-reference