Welche legitimen Gründe gibt es, den unären Operator & amp;
Okay, ich habe inspiriert durch einige Kopf Stanzen. Scheint eine überlastung operator&
führt zu nicht eine kleine Menge von Schmerz.
Welche berechtigten Fällen existieren für überlastung?
(Kann nicht sagen, dass ich je gemacht habe,....)
InformationsquelleAutor der Frage Billy ONeal | 2011-06-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube mich zu erinnern so etwas wie eine smart-pointer-Klasse, die überschrieb
operator&
denn es wollte schon wieder die Adresse der enthaltenen Zeiger lieber, als die Adresse von der smart-pointer-Objekt. Kann mich nicht erinnern, wo ich es sah, oder ob es schien wie eine gute Idee zu der Zeit.Aha, erinnerte sich: Microsoft CComPtr.
Edit: Zu verallgemeinern, es könnte Sinn machen unter den folgenden Bedingungen:
Rückkehr alles andere als eine legitime Zeiger würde gegen die Prinzip der geringsten Verwunderung.
InformationsquelleAutor der Antwort Mark Ransom
Ist es sinnvoll, bei der Darstellung des
&
Betrieb in lambda-Platzhalter-Schreibweise, z.B.&_1[_2]
.InformationsquelleAutor der Antwort Mehrdad
Überladen von unären
&
macht Ihr Objekt Verhalten sich wie ein Referenz (in dieser Hinsicht).Ich bin mir ziemlich sicher, dass es ein fool ' s errand, um zu versuchen, alternativen zu bieten, um integrierte Verweise, insbesondere da die Referenzen sind keine Objekte überhaupt in C++, und Sie haben nicht Ihre eigenen Adressen. Instanzen des benutzerdefinierten Typs zwangsläufig sind Objekte und haben Adressen, auch wenn Sie deaktivieren die normale Art und Weise der Erlangung dieser Adresse. So ist es nie eine perfekte imitation.
Aber die Menschen sind sehr daran interessiert, auf Benutzer-definierten alternativen, um die Zeiger, so kann ich sehen, wie könnte jemand wollen, um es zu versuchen. Ich bin mir nicht sicher, dass Sie vermeiden, die Schaffung einer Art, die (mis)verhält sich in einer Weise, die Ihre Benutzer möchten Sie nicht gestört.
InformationsquelleAutor der Antwort Steve Jessop
Vier Jahre später, eine andere Antwort.
Andere Verwendung, die ich gesehen habe, ist, wenn Sie Huckepack aus der C++ - Sprache, sondern definieren Sie Ihre eigene Semantik. Paradebeispiel: Boost.Geist.
Steigern.Geist, insbesondere Qi für die Analyse, überladungen von Operatoren auf Parser, um eine EBNF-syntax für die Angabe von beliebigen parser-Objekte. Insbesondere der unäre
&
- operator ist überladen zu bieten, die Und-Prädikat-Parser.Beispiel:
So, in kurzen, einfachen
&
hier hat keinen Bezug zu Zeigern an alle; es hat eine domänenspezifische Semantik, die für die Qi-parser-Objekte.InformationsquelleAutor der Antwort Anthony
Ich habe dies getan, um eine gute Wirkung im Rahmen eines DSL-erzeugt LLVM-code. Ein Beispiel soll das verdeutlichen. Sagen
x
undy
Werte sind (d.h., Objekte vom Typvalue
). Dann wird der Ausdruckx+y
strahlt einer ADD-Anweisung in code-stream. Sehr vernünftig, den Ausdruck&x
strahlt eine Anweisung an nehmen Sie sich die Adresse vonx
.InformationsquelleAutor der Antwort AndyJost
Sobald ich verwendet, um zu überschreiben, operator & (ohne änderung seines Verhaltens) als privat in der Klasse, zum Schutz gegen gelegentliche Erstellung von smart-pointer auf das erzeugte Objekt in den Stapel. Noch nicht sicher, ob es wirklich eine gute Idee...
InformationsquelleAutor der Antwort Andrey Betenev
Können Sie überlasten die Adresse, die Betreiber, um es privat. Dies könnte nützlich sein für die Durchführung irgendeine Art von baton passing Schema, wo die Adresse von der Leitung getroffen werden kann. Wenn der baton - Konstruktoren sind versteckt, dies kann halten Sie den Stab in den Anwendungsbereich luftdicht.
InformationsquelleAutor der Antwort Thomas Eding