2016-07-15 19 views
0

I „The C++ Programming Language (4. Auflage)“ ich lesen, und ich lief in dieses:Dereferenzierung eine Referenz

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 
} 

Also von dem, was ich verstehe, sind wir durch c laufen und einen Verweis bekommen zu x, das ist die aktuelle Iteration. x wird dann an den Funktionsaufrufoperator op übergeben, aber es wird zuerst dereferenziert? Warum sollte x dereferenziert werden?

+2

Siehe den Kommentar, wo es heißt, dass "C" ist ein Behälter mit Zeigern. Anscheinend will 'op()' keinen Zeiger, sondern den Wert, auf den der Zeiger zeigt. Also musst du indirekt sein. – Barmar

Antwort

4

sagte Sie in einem Kommentar in dem entsandten Code:

// assume that C is a container of pointers 

Das bedeutet x ein Verweis auf einen Zeiger. *x wird als das Objekt ausgewertet, auf das der Zeiger zeigt.

op muss ein Objekt oder eine Referenz auf ein Objekt erwarten, kein Zeiger auf ein Objekt.

+1

Nun, das erklärt es. Der Code ist übrigens direkt aus dem Buch und gehört mir nicht. Ich denke, der Kommentar ging über meinen Kopf. –