Objekt initialisieren mit dem Komma/Gleich Operator
-
Rew. schrieb:
Das meinte ich nicht. Ich meinte das Auf-die-Kacke-Gehaue. Obwohl du dir zugegebenermaßen viel Wissen angeeignet hast, bist du genau so geblieben wie vor 3-4 Jahren. Einfach nur du

3-4 Jahre?!? Ich hab' genau April 2011 angefangen

Und was meinst du mit Auf-Die-Kacke hauen? Peitscht man die Leute solange aus, bis sie es kapieren, dann klappt es vielleicht irgendwann auch mit Code-Tags. :träum:
-
sone hat schon recht, initializer_list ist genau *das* Mittel der Wahl.
Ich hoffe, du erstellst die Klassen nur zu Übungszwecken und wechselst zu std::string und std::list (oder einem anderen passenden Container), wenn es ernst wird.
-
CList<CString> items; (items, L"Hallo", L"das", L"ist", L"ein", L"Test");Wenn das für dich in Ordnung ist, musst du folgende Operatoren implementieren:
CList<CString>& operator,(CList<CString>& list, wchar_t const* s);
-
Oder man benutzt user-defined literals.
Ethon, lass doch den Doofsinn.
Den Kommaoperator sollte man nie Überladen.
-
Sone schrieb:
Den Kommaoperator sollte man nie Überladen.
Sagt wer? Ich lege Einspruch ein.
-
Google C++ Style Guide sagt: Do not overload operators except in rare, special circumstances
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Operator_Overloading
-
dd++ schrieb:
Do not overload operators except in rare, special circumstances
zwischen "rare special circumstances" und "nie" ist ja nun schon noch ein kleiner Unterschied
-
...
-
Kellerautomat schrieb:
Sone schrieb:
Den Kommaoperator sollte man nie Überladen.
Sagt wer? Ich lege Einspruch ein.
Nein, es geht um normalen Endanwendercode. Für solche Template-Bibliotheken wie die von Boost ist es klar, dass da keine Regeln gelt'n :p
-
Sone schrieb:
Nein, es geht um normalen Endanwendercode. Für solche Template-Bibliotheken wie die von Boost ist es klar, dass da keine Regeln gelt'n :p
Also wenn boost.assign oder boost.lambda nicht fuer Endanwender ist, dann weiss ich auch nicht.
-
Kellerautomat schrieb:
Sone schrieb:
Nein, es geht um normalen Endanwendercode. Für solche Template-Bibliotheken wie die von Boost ist es klar, dass da keine Regeln gelt'n :p
Also wenn boost.assign oder boost.lambda nicht fuer Endanwender ist, dann weiss ich auch nicht.
Nein, Boost.Assign oder Boost.Lambda sind aber kein Endanwendercode, sondern sehr flexibel zugeschnitten. Das war auch die Aussage - Code, den du für das eine Programm schreibst.
-
...
-
Swordfish schrieb:
Eine Operatorüberladung, die irgendeine Header-only-Bibliothek definiert hat auch im restlichen Programm Gülitigekt ... Wo willst denn da User von Library trennen!?
Gut, gut, ich habe mich vertüdelt. Wieder.
Aber was ist damit:pumuckl schrieb:
Es wird allgemein davon abgeraten, diesen Operator zu überladen, zumal die Auswertungsreihenfolge der beiden Argumente unbestimmt ist im Gegensatz zum eingebauten operator,, bei dem immer das linke Argument zuerst ausgewertet wird. Allerdings wird er in boost::assign überladen, um das Erstellen von Listen zur Initialisierung von Containern zu ermöglichen.
Irgendwelche Fälle wo es Sinn macht gibt es natürlich immer.
-
...
-
sollte, Swordfish, sollte.