[C++] Operator nur als Member überladbar

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Jonathan
Establishment
Beiträge: 2660
Registriert: 04.08.2004, 20:06
Kontaktdaten:

[C++] Operator nur als Member überladbar

Beitrag von Jonathan »

Moin,

ich habe 2 std::vectoren verschiedenen Typs, und wollte die jetzt einander zuweisen. Die entsprechende Schleife wollte ich dabei gerne in einen operator= packen statt in eine normale Funktion. Allerdings lässt mich mein Compiler nicht.

http://msdn.microsoft.com/de-de/library ... 80%29.aspx

Gut, da kann man vermutlich wenig machen, aber gibt es dafür auch einen Grund? Klar, normalerweise muss der operator= auch den private-Teil eines Objektes ändern, aber in diesem Fall reicht mir eben das public Interface aus. Außerdem ist doch auch der operator+= als globale Funktion erlaubt, und der macht doch fast das selbe.
Oder gibt es irgendwelche Fälle, in denen es der Compiler schwer hätte, den operator zu finden, wenn er kein Member ist? Es wäre halt schön, irgendeinen Grund für diese Einschränkung zu haben, denn sonst verbietet C++ ja auch nichts, was zwar meist gefährlich und sinnlos, in wenigen Fällen aber total nützlich ist.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
dot
Establishment
Beiträge: 1746
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [C++] Operator nur als Member überladbar

Beitrag von dot »

Der Grund ist in erster Linie mal, dass der C++ Standard sagt, dass es nicht geht. Als Hintergrund könnte ich mir dabei vorstellen, dass es im Kontext mit dem Build Model von C++ schwierig bis unmöglich wäre, festzustellen, ob irgendwo ein Assignment Operator für eine Klasse deklariert ist und es auch zu Mehrdeutigkeiten kommen könnte, wenn man auch freie Funktionen erlaubt. Dies muss aber immer und überall eindeutig feststellbar sein, da ansonsten nicht klar wäre, ob eine Klasse nun einen impliziten Assignment Operator hat oder nicht...
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [C++] Operator nur als Member überladbar

Beitrag von Krishty »

Wieso? Für operator / ist es doch auch kein Problem, mehr oder weniger global (ADL und so) einen passenden zu finden.

Mich würden die Hintergründe ebenfalls interessieren; auch mit Bezug auf den unären Minus-Operator, der ebenfalls ausschließlich Methode sein darf.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1746
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: [C++] Operator nur als Member überladbar

Beitrag von dot »

Es gibt aber auch keinen impliziten operator / und keinen mir bekannten Grund, wieso es problematisch wäre, wenn ein evtl. vorhanderer operator / nicht in jeder Übersetzungseinheit deklariert wäre. Anyway, ist natürlich nur ein Versuch, irgendeine nicht völlig abwegige Erklärung zu finden. Vermutlich ist die Antwort einfach, dass es so ist, weil es so ist und keinen besonderen technischen Grund hat...
Antworten