Zeiger vs. Referenzen
-
Soweit ich weiß, werden Referenzen intern meistens auch als Zeiger gehandelt... von daher dürfte es egal sein.
-
Stromberg schrieb:
Und was ist schneller? Zeiger oder Referenz?
ICh würde sagen: WENN, dann eine Referenz (weil der Compiler die manchmal komplett wegoptimieren kann).
Aber das kommt sehr auf den konkreten Fall an.Performance würde ich nicht zum Entscheidungskriterium für "Ref vs Ptr" machen (für "const-Ref vs Kopie" schon eher).
Gruß,
Simon2.
-
Zeiger können IMO genauso wegoptimiert werden wie Referenzen.
-
hustbaer schrieb:
Zeiger können IMO genauso wegoptimiert werden wie Referenzen.
Da Referenzen striker sind, nehme ich mal an, dass man dafür zumindest in bestimmten Fällen besser optimieren kann (zB Aliasing).
(Aber wie Simon2 sagte, ist das absolut kein allgemeines Entscheidungskriterium!)
-
hustbaer schrieb:
Zeiger können IMO genauso wegoptimiert werden wie Referenzen.
... aber vermutlich nicht in Fällen, wo Referenzen NICHT wegoptimiert werden können.
Gruß,
Simon2.
-
Simon2 schrieb:
hustbaer schrieb:
Zeiger können IMO genauso wegoptimiert werden wie Referenzen.
... aber vermutlich nicht in Fällen, wo Referenzen NICHT wegoptimiert werden können.
Nein, vermutlich nicht. Was willst du mir damit sagen? Hab ich was anderes behauptet oder impliziert?
ICh würde sagen: WENN, dann eine Referenz (weil der Compiler die manchmal komplett wegoptimieren kann).
Das impliziert dass es bei Zeigern nicht so wäre. Ist aber so. Können auch "komplett" wegoptimiert werden.
-
hustbaer schrieb:
Simon2 schrieb:
hustbaer schrieb:
Zeiger können IMO genauso wegoptimiert werden wie Referenzen.
... aber vermutlich nicht in Fällen, wo Referenzen NICHT wegoptimiert werden können.
Nein, vermutlich nicht. Was willst du mir damit sagen? Hab ich was anderes behauptet oder impliziert?...
Aaaalso. Meine Aussage/Vermutung war:
In X% der Fälle sind Referenzen und Zeiger gleich gut optimierbar (=> "gleich schnell"). In 100-X% sind Referenzen optmierbar und Zeiger nicht (=> "Referenzen schneller")
(Meine Schätzung: "X = 100-ε")
=> "WENN, dann sind Referenzen schneller"
(Großschreibung, um den Konjuktiv zu betonen.hustbaer schrieb:
ICh würde sagen: WENN, dann eine Referenz (weil der Compiler die manchmal komplett wegoptimieren kann).
Das impliziert dass es bei Zeigern nicht so wäre...
Wäre mir nicht in den Sinn gekommen und lese ich auch nicht daraus.
Gruß,
Simon2.
-
hat C++ übergaupt Zeiger und Referenzen? Würde eines nicht genügen?
-
Wieso? schrieb:
hat C++ übergaupt Zeiger und Referenzen? Würde eines nicht genügen?
Weil es praktisch ist und damit eigene Objekte natürlicher wirken.
-
Wieso? schrieb:
hat C++ übergaupt Zeiger und Referenzen?
Ja, hat es.
(kleiner Tip: Nutzernamen und Beitrags-Titel werden oft überlesen - also pack deine Fragen lieber direkt (und vollständig) in den Beitrag ;))
Würde eines nicht genügen?
Wie man aus C weiß, würden Zeiger alleine durchaus ausreichen. Aber Referenzen bieten teilweise Vereinfachungen (kein Dereferenzieren notwendig) und erweiterte Zusicherungen gegenüber Zeigern (eine Referenz verweist IMMER auf ein Objekt - und zwar während ihrer gesamten Lebenszeit auf das selbe).
-
Wieso? schrieb:
Würde eines nicht genügen?
... wofür genügen ?
"Warum überhaupt int und double ? Würde nicht eines genügen ?"...
Gruß,
Simon2.
-
> Wie man aus C weiß, würden Zeiger alleine durchaus ausreichen. Aber Referenzen
> bieten teilweise Vereinfachungen (kein Dereferenzieren notwendig) und erweiterte
> Zusicherungen gegenüber Zeigern (eine Referenz verweist IMMER auf ein Objekt -
> und zwar während ihrer gesamten Lebenszeit auf das selbe).Also sind Referenzen besser und man könnte auf Zeiger völlig verzichten.
Simon2 schrieb:
"Warum überhaupt int und double ? Würde nicht eines genügen ?"...
Gute Frage. Ich würde sie eher mit float und double stellen. Wieso float, wenn es doch double gibt?
-
Hmmm... schrieb:
Also sind Referenzen besser und man könnte auf Zeiger völlig verzichten.
Nein. Lies den Abschnitt über die Zusicherungen nochmal (Hinweis: manchmal möchte man etwas bestimmtes garnicht zugesichert bekommen).
-
LordJaxom schrieb:
Hmmm... schrieb:
Also sind Referenzen besser und man könnte auf Zeiger völlig verzichten.
Nein. Lies den Abschnitt über die Zusicherungen nochmal (Hinweis: manchmal möchte man etwas bestimmtes garnicht zugesichert bekommen).
Welchen Abschnitt über Zusicherungen? Was meinst du damit?
-
Hmmm... schrieb:
Welchen Abschnitt über Zusicherungen? Was meinst du damit?
> [...] und erweiterte
> Zusicherungen gegenüber Zeigern (eine Referenz verweist IMMER auf ein Objekt -
> und zwar während ihrer gesamten Lebenszeit auf das selbe).Angenommen, Zeiger wären in C++ nicht mehr vorhanden. Was machst Du jetzt, wenn Du einen Verweis brauchst, der auch mal auf kein Objekt zeigen oder sein Ziel ändern kann? Sprich, von dem Du garnicht möchtest, dass er IMMER auf dasselbe Objekt verweist?
-
LordJaxom schrieb:
Angenommen, Zeiger wären in C++ nicht mehr vorhanden. Was machst Du jetzt, wenn Du einen Verweis brauchst, der auch mal auf kein Objekt zeigen oder sein Ziel ändern kann? Sprich, von dem Du garnicht möchtest, dass er IMMER auf dasselbe Objekt verweist?
Wieso sollte ich einen Verweis auf "kein Objekt" brauchen? Wozu nützt mir solch ein Verweis?
Und ich kann doch eine Funktion, die eine Referenz erwartet, von verschiedenen Stellen aufrufen und habe somit verschiedene Ziele.
Hast du vielleicht einen Beispiel, bei dem man Zeiger benutzen muß, ohne daß man das selbe auch mit Referenzen erreichen kann?
-
Ein paar Möglichkeiten:
- optionale Werte - du übergibst NULL für "der Wert interessiert mich nicht"
- Sondermarkierungen, z.B. für das Ende einer verketteten Liste
- wo wir gerade bei Listen sind: Die Nachfolger-Beziehungen zwischen Elementen können/müssen sich während der Laufzeit auch ändern
- ...
(außerdem gibt es zwar Zeiger-Arithmetik (Pointer-Addition, Index-Operator etc), aber keine dazu analoge Referenz-Arithmetik)
-
CStoll schrieb:
optionale Werte - du übergibst NULL für "der Wert interessiert mich nicht"
Man könnte doch eine Referenz auf einen Wert "interessiert mich nicht" übergeben.
CStoll schrieb:
Sondermarkierungen, z.B. für das Ende einer verketteten Liste
wo wir gerade bei Listen sind: Die Nachfolger-Beziehungen zwischen Elementen können/müssen sich während der Laufzeit auch ändernVerkettete Listen sind IMHO auch ohne Zeiger möglich.
Ich glaube langsam, Zeiger existieren nur in C++ aus kompatibilitätsgründen zu C.
-
Hast du vielleicht einen Beispiel, bei dem man Zeiger benutzen muß, ohne daß man das selbe auch mit Referenzen erreichen kann?
Ja, klar, greif mal auf ein Array zu.
(Egal wie du das machst werden immer Zeiger im Spiel sein, auch wenn man im Code keine "sieht")
-
Hmmm... schrieb:
Verkettete Listen sind IMHO auch ohne Zeiger möglich.
Das möchte ich gerne sehen
