2016-07-15 84 views
0

我在读“C++编程语言(第4版)”,我就遇到了这个:解引用的参考

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

+2

查看注释,它说“C”是指针的容器。显然'op()'不需要指针,它需要指针指向的值。所以你必须间接。 – Barmar

回答

4

您在发布代码中的注释说:

// assume that C is a container of pointers 

这意味着x是一个指针引用。 *x评估为指针指向的对象。

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

+1

那就解释一下吧。顺便说一句,代码是直接从书中,不是我的。我想这个评论在我头上。 –