2013-12-22 3 views
8

Ich habe kürzlich den Quellcode von SGI STL angezeigt. Ich möchte wissen, ob ich die nutzen können "->" Operator die (*node).data zu ersetzen die operator*(), wie dies umzusetzen:Warum verwendet der Iterator von List in AWL die (* Knoten) .data anstelle von node-> data?

reference operator*() const {return (*node).data;} 

ersetzt durch:

reference operator*() const {return node->data;} 

zusätzlich:

node ist ein Zeiger, der auf ein struct-Objekt zeigt, wie folgt:

+0

Sie können, aber was ist der Sinn? –

+2

Wahrscheinlich, ja. Welcher Typ ist 'node' und überlädt er' operator-> 'oder unary' operator * '? –

+0

Knoten ist ein Zeiger, der auf eine Struktur verweist __list_node {} – Jeff

Antwort

10

In den meisten Fällen (z. B. wenn node ein Zeiger ist) sind diese gleichwertig. Der Operator x->y ist definiert als entspricht (*(x)).y. Es ist jedoch möglich, operator* oder operator-> zu überlasten. In diesem Fall verhalten sie sich möglicherweise nicht wie erwartet (aber sie sollten sollten). Wie Sie gesagt haben, in diesem Fall node ist nur ein Zeiger, so dass sie gleichwertig sind.

+6

* "In diesem Fall verhalten sie sich vielleicht nicht so, wie Sie es erwarten würden" * - Aber wenn sie es nicht tun, hören Sie bitte auf, diese Bibliothek zu benutzen. Der Autor ist eine schlechte Person. –

Verwandte Themen