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.
[C++] Operator nur als Member überladbar
[C++] Operator nur als Member überladbar
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
https://jonathank.de/games/
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: [C++] Operator nur als Member überladbar
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...
- Krishty
- Establishment
- Beiträge: 8350
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [C++] Operator nur als Member überladbar
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.
Mich würden die Hintergründe ebenfalls interessieren; auch mit Bezug auf den unären Minus-Operator, der ebenfalls ausschließlich Methode sein darf.
- dot
- Establishment
- Beiträge: 1746
- Registriert: 06.03.2004, 18:10
- Echter Name: Michael Kenzel
- Kontaktdaten:
Re: [C++] Operator nur als Member überladbar
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...