Warum C den Bereichsauflösungsoperator eingeführt hat
Im Vergleich zu Java bietet C einen eigenen Bereichsauflösungsoperator (::), anstatt sich darauf zu verlassen ausschließlich auf dem Punktoperator (.). Trotz des Erfolgs von Java ohne separaten Operator machte C diese Ergänzung aufgrund einer einzigartigen Sprachfunktion erforderlich: der Möglichkeit, denselben Bezeichner sowohl für eine Mitgliedsvariable als auch für einen abgeleiteten Klassentyp zu verwenden.
Dieser Unterschied wird bei der Betrachtung von Code deutlich wie im folgenden Beispiel:
struct foo { int blah; }; struct thingy { int data; }; struct bar : public foo { thingy foo; };
In diesem Szenario haben sowohl die Mitgliedsvariable foo innerhalb der Bar-Struktur als auch der abgeleitete Klassentyp foo denselben Namen. Um diese Mehrdeutigkeit aufzulösen, wird der Bereichsauflösungsoperator :: verwendet.
Wenn der Compiler auf ein . trifft, geht er davon aus, dass der linke Operand ein Objekt ist. Im Gegensatz dazu bezeichnet :: einen Typnamen, einen Namensraum oder den globalen Namensraum. Diese Unterscheidung ermöglicht es dem Compiler, Code wie folgt zu interpretieren:
test.foo.data = 5; test.foo::blah = 10;
In der ersten Anweisung wird test.foo.data als Zugriff auf das Datenelement des Objekts test.foo erkannt. In der zweiten Anweisung bezeichnet test.foo::blah den Zugriff auf das blah-Mitglied der abgeleiteten Klasse foo.
Der Bereichsauflösungsoperator in C dient somit als Präzisionswerkzeug zum Auflösen von Mehrdeutigkeiten, die durch die Zulässigkeit von Identischen entstehen Bezeichner für Mitgliedsvariablen und abgeleitete Klassentypen.
Das obige ist der detaillierte Inhalt vonWarum verwendet C den Bereichsauflösungsoperator (::), während Java dies nicht tut?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!