取消引用的引用

6
我正在阅读《C++程序设计语言(第四版)》,遇到了这个问题:
template<class C, class Oper>
void for_all(C& c, Oper op) // assume that C is a container of pointers
{
    for (auto& x : c)
        op(*x); // pass op() a reference to each element pointed to
}

据我理解,我们正在遍历c并获取x的引用,它是当前迭代的对象。x然后传递给op的函数调用操作符,但首先进行了解引用操作?为什么要解引用x

4
请查看注释,其中提到C是指针的容器。显然op()不需要一个指针,而是需要指针所指向的值。因此,您需要进行间接操作。 - Barmar
1
在读完同样的代码片段后,我逐字谷歌搜索了“引用解引用”!很高兴看到我不是唯一犯这个错误的人。 - hyrumcoop
1个回答

9
您在发布的代码中的评论中提到:

您在发布的代码的评论中说:

// assume that C is a container of pointers

这意味着x是一个指针的引用。*x将计算出该指针所指向的对象。

op必须期望一个对象或对象的引用,而不是对象的指针。


1
好的,这就解释了。顺便说一下,这段代码是直接从书上摘抄的,不是我自己写的。我想我可能没看懂那个注释。 - Meme Master

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接