Dereferenzierung Verständnisfrage
-
dasgehtsonicht schrieb:
std::cout << *it.str() << std::endl;std::cout << (*it).str() << std::endl;Wo ist der Unterschied zwischen den beiden Versionen?
Wo ist der Unterschied zwischen
4+3*9
(4+3)*9
?Na, das erste kann man so klammern, ohne die Bedeutung zu verändern:
4+(3*9)Genauso ist
*it.str()
dasselbe wie
*(it.str())Postfix vor Präfix.
-
Sone schrieb:
Der Punkt-Operator bindet stärker als der Sternchen-Operator
Siehe Operator Präzedenz. Member-Zugriff und folglicher Funktionsaufruf haben Priorität über der Deferenzierung, jedoch hat die Umklammerung eine noch höhere.
-
Klammern sind kein Operator, sie machen es einfach unmöglich, den Ausdruck als etwas anderes zu interpretieren. Selbst bei beliebiger Operatorrangfolge wären die Ausdrücke (3+4)*9 und 3+(4*9) unmissverständlich, was die Operanden und Operatoren betrifft.
-
Menidan schrieb:
Klammern sind kein Operator, sie machen es einfach unmöglich, den Ausdruck als etwas anderes zu interpretieren. Selbst bei beliebiger Operatorrangfolge wären die Ausdrücke (3+4)*9 und 3+(4*9) unmissverständlich, was die Operanden und Operatoren betrifft.
Streng genommen sind Klammern auch Operatoren, die allerdings die Stärkste Bindung haben. Hier muss man allerdings zwischen einem Funktionsaufruf und Bindungsklammern unterscheiden.
-
Ja, muss man, definitiv. Der Funktionsaufrufoperator ist ein Operator und hat die (nach ::) zweithöchste Priorität, die (Bindungs-)Klammern sind kein Operator und haben daher auch keine Priorität.
edit: Danke für die Korrektur @zuckersüss.
-
Bashar schrieb:
(Bindungs-)Klammern sind kein Operator und haben daher auch keine Priorität.
Ansichtssache.
Man könnte auch sagen, Bindungsklammern(exp)wären nur syntaktischer Zucker fürstd::move(1?exp:exp).Bashar schrieb:
Der Funktionsaufrufoperator [...] hat die höchste Priorität
Was übrigens nicht stimmt, sonst würde
std::move(1)alsstd::(move(1))geparst.
-
-
Cyres schrieb:
http://de.wikibooks.org/wiki/C++-Programmierung:_Liste_der_Operatoren_nach_Priorität
Wenn du nichts besseres als Wikibooks findest, sollte dir das zu denken geben

-
Youka schrieb:
Sone schrieb:
Der Punkt-Operator bindet stärker als der Sternchen-Operator
Siehe Operator Präzedenz. Member-Zugriff und folglicher Funktionsaufruf haben Priorität über der Deferenzierung, jedoch hat die Umklammerung eine noch höhere.
Wieso zitierst du mich?

Man könnte auch sagen, Bindungsklammern (exp) wären nur syntaktischer Zucker für std::move(1?exp:exp).
Nein, das ist nicht dasselbe.
movegibt immer eine rvalue-Referenz zurück. Eine rvalue-Referenz verhält sich nicht immer wie ein prvalue. Schondecltypesagt was anderes.
-
Bashar schrieb:
Cyres schrieb:
http://de.wikibooks.org/wiki/C++-Programmierung:_Liste_der_Operatoren_nach_Priorität
Wenn du nichts besseres als Wikibooks findest, sollte dir das zu denken geben

Es war bloß das erste was ich gefunden habe auf google und wenn man die Uhrzeit betrachtet, weiß man auch, warum ich keine große Motivation hatte, weiterzusuchen
Außerdem scheint mir die Liste recht Vollständig.
-
Cyres schrieb:
[wikibooks]
Es war bloß das erste was ich gefunden habe auf googleInsbesondere wahrscheinlich das erste, was die gewöhnliche Klammerung als Operator auffasst und damit deine Argumentation zu stützen scheint. Such noch ein bisschen weiter, mit etwas Glück findest du noch mehr, die in diese Verständnisfalle getappt sind, aber ich würde nicht drauf wetten.