Warum C-Compiler Vergleichsoperatoren nicht automatisch generieren
Obwohl der Compiler wichtige Methoden wie Standardkonstruktoren und Zuweisungsoperatoren bereitstellen kann, ist dies der Fall Insbesondere wird die Definition von Vergleichsoperatoren wie „operator==“ und „operator!=“ weggelassen. Diese Auslassung hat die Frage aufgeworfen: Warum?
Ein Argument legt nahe, dass der Compiler, wenn er einen Standardkopierkonstruktor generieren kann, auch in der Lage sein sollte, einen Standardoperator==() bereitzustellen. Die Entscheidung, dies nicht zu tun, könnte jedoch auf die Zurückhaltung von Bjarne Stroustrup, dem Erfinder von C, zurückzuführen sein, Standard-Kopiermechanismen einzubauen.
In seinem Buch „The Design and Evolution of C“ bringt Stroustrup seine Missbilligung zum Ausdruck von Standardkopiervorgängen und gibt an, dass er das Kopieren in seinen eigenen Klassen häufig verbietet. Diese Zurückhaltung rührt von der Tatsache her, dass Standardkopierkonstruktoren von C geerbt wurden und häufig missbraucht werden.
Anstatt zu fragen, warum C den Standardoperator ==() fehlt, ist es daher sinnvoller zu überlegen, warum er Folgendes enthält Standardzuweisungs- und Kopierkonstruktoren. Diese Entscheidung wurde aus Gründen der Abwärtskompatibilität mit C getroffen, die sowohl ein Segen als auch ein widerwärtiger Kompromiss in der Entwicklung von C war.
Für diejenigen, die es vorziehen, standardmäßige Kopiervorgänge zu verhindern, indem sie private Zuweisungsoperatoren und Kopierkonstruktoren deklarieren in ihren IDE-Schnipseln kann eine nützliche Vorgehensweise sein. Dies ermöglicht bei Bedarf das explizite Entfernen dieser Deklarationen und gewährleistet so eine bessere Kontrolle über das Klassenverhalten.
Das obige ist der detaillierte Inhalt vonWarum generieren C-Compiler nicht automatisch Vergleichsoperatoren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!