我没有得到这本书中的代码片段:
template <typename Resource, typename Identifier>
Resource& ResourceHolder<Resource, Identifier>::get(Identifier id)
{
auto found = mResourceMap.find(id);
assert(found != mResourceMap.end());
return *found->second;
}
为什么我们在正常迭代器而不是指针时解除引用变量?然后它被访问,好像我们有类似int obj = new Obj(); &安培; obj-&GT; someVar;
此页面上的cpp参考http://www.cplusplus.com/reference/iterator/ 说你可以将迭代器取消引用为右值。
我开始阅读此页http://thbecker.net/articles/rvalue_references/section_01.html
这是一篇很好的文章,但它有点密集,任何人都可以在我提供的示例代码的上下文中澄清这一点?
答案 0 :(得分:4)
*found->second
取消引用found->second
返回的指针。 ->
运算符的优先级高于*
(有关完整列表,请参阅operator precedence),因此该语句实际上与*(found->second)
相同,而不是(*found)->second
就像你在想的那样。