我尝试使用实现hashmap并向其添加移动语义..但由于某些原因,在某些情况下rvalue无法识别,任何人都可以检测到原因吗?并解释一下? 这是插入内容:
inline bool Insert (Key_t const& key,
Value_t const& val,
iterator* itr = nullptr) {
return Insert(value_type(key, val), itr);
}
/** see comments above */
inline bool Insert (Key_t&& key,
Value_t const& val,
iterator* itr = nullptr) {
return Insert(value_type(std::forward<Key_t>(key), val), itr);
}
/** see comments above */
inline bool Insert (Key_t const& key,
Value_t&& val,
iterator* itr = nullptr) {
return Insert(value_type(key, std::forward<Value_t>(val)), itr);
}
/** see comments above */
inline bool Insert (Key_t&& key,
Value_t&& val,
iterator* itr = nullptr) {
return Insert(value_type(std::forward<Key_t>(key), std::forward<Value_t>(val)), itr);
}
这是我的测试员:
typedef HashMap_T<std::string, int> D;
D d;
d.Insert("Alon", 1);
现在我预计它会转到Key_t&amp;&amp;和Value_t&amp;&amp;,但由于某种原因它转到了Key_t const&amp; amp;和Value_t&amp;&amp; ...
但是插入中构造的std :: string将被删除,为什么它不被识别为rvalue?
修改 的 当然字符串文字是左值,但我插入字符串...只是让你明白,这确实是去Key_t&amp;&amp;和Value_t&amp;&amp;:
typedef HashMap_T<std::string, int> D;
D d;
d.Insert(std::string("Alon"), 1);
谢谢, 阿龙