Operator >> überladen
-
314159265358979 schrieb:
Was dich an dem = stört, verstehe ich nicht.
Das stört mich nicht. Das finde ich sogar gut. Es passt nur nicht zusammen, das man sowohl Sonderzeichen als auch die Formatierung heranzieht, um die logische Struktur zu definieren. Zumal doch durch das Gleichheitszeichen schon alles klar ist.
Und wo haben Whitespaces eine Bedeutung bei mir? (Oder zählst du Zeilenumbrüche zu den Whitespaces?)
Natürlich! Wer auf der Welt zählt denn Zeilenumbrüche nicht als Whitespace?
Ich finde es immer noch seltsam, eine vom User in mehrere Zeilen getrennte Eigenschaft als gewollt anzunehmen. Niemand würde das so schreiben.
Hätten K&R damals gesagt, dass niemand jemals Anweisungen auf mehrere Zeilen verteilen würde, würdest du dich heute ganz schön ärgern.
-
SeppJ schrieb:
Zumal doch durch das Gleichheitszeichen schon alles klar ist.
Jein. Natürlich ist es dadurch eindeutig. Aber ein einigemaßen brauchbares Format sollte zumindest versuchen, simple Fehler zu verhindern.
SeppJ schrieb:
Hätten K&R damals gesagt, dass niemand jemals Anweisungen auf mehrere Zeilen verteilen würde, würdest du dich heute ganz schön ärgern.
Naja. Sobald man Arrays oder sowas einführt, wird man wohl erlauben müssen, in mehrere Zeilen aufzuteilen. Allerdings würde ich dann nach jedem Eintrag ein Semikolon fordern oder so.
-
Dann änder das Format in "Key = Value;" und SeppJ ist zufrieden, ohne dass du eine einzige zusätzliche Zeile Code schreiben musst.
-
Ethon schrieb:
Dann änder das Format in "Key = Value;" und SeppJ ist zufrieden, ohne dass du eine einzige zusätzliche Zeile Code schreiben musst.
-
Hm. Klingt gar nicht mal so blöd.
while(is >> key >> Char<'='> >> value >> Char<';'>) ...
-
314159265358979 schrieb:
Char<'='>
Wasn das?
-
Hacker schrieb:
Wasn das?
Ich vermute mal aus dem Zusammenhang etwas wie:
template <char C> struct Char { friend istream& operator>>(istream & in, Char) { char c = C + 1; in >> c; if (c != C) in.setstate(ios::failbit); return in; } };
-
SeppJ schrieb:
Hacker schrieb:
Wasn das?
Ich vermute mal aus dem Zusammenhang etwas wie:
template <char C> struct Char { friend istream& operator>>(istream & in, Char) { char c = C + 1; in >> c; if (c != C) in.setstate(ios::failbit); return in; } };
Wieso
C + 1
?
-
Hacker schrieb:
Wieso
C + 1
?Damit c auf jeden Fall ungleich C ist.
Außerdem ist natürlich die Operatorüberladung als friend bei einem memberlosen struct etwas sinnlos, das war
Gewohnheiteine ganz clevere Optimierung der Compilezeit, damit mit weniger mögliche Überladungen im globalen Namensraum liegen.
-
SeppJ schrieb:
Hacker schrieb:
Wieso
C + 1
?Damit c auf jeden Fall ungleich C ist.
Da hat mein Gehirn mal wieder kurz eine Auszeit genommen. Natürlich, jetzt ergibt das viel Sinn
-
SeppJ schrieb:
Damit c auf jeden Fall ungleich C ist.
Dabei kann ein Überlauf auftreten, was zu implementation-defined behavior führt. Desweiteren habe ich zum Verstehen des Codes nun eine Minute länger gebraucht.
Warum diesen "Hack" verwenden, wenn du auch einfach if(is >> c && c != C) schreiben könntest? Premature und so :p
Übrigens wäre Char ein Funktionstemplate, kein Klassentemplate.
-
314159265358979 schrieb:
SeppJ schrieb:
Damit c auf jeden Fall ungleich C ist.
Dabei kann ein Überlauf auftreten, was zu implementation-defined behavior führt. Desweiteren habe ich zum Verstehen des Codes nun eine Minute länger gebraucht.
Warum diesen "Hack" verwenden, wenn du auch einfach if(is >> c && c != C) schreiben könntest? Premature und so :p
Übrigens wäre Char ein Funktionstemplate, kein Klassentemplate.
Das ist kein Hack, stinknormale Vorgehensweise, wenn du einen Integer möchtest, der garantiert ungleich einem Anderen ist.
Wird sehr oft bei Prüfsummen etc eingesetzt, um garantiert falsche Prüfsummen zu erzeugen.
-
314159265358979 schrieb:
SeppJ schrieb:
Damit c auf jeden Fall ungleich C ist.
Dabei kann ein Überlauf auftreten, was zu implementation-defined behavior führt. Desweiteren habe ich zum Verstehen des Codes nun eine Minute länger gebraucht.
Warum diesen "Hack" verwenden, wenn du auch einfach if(is >> c && c != C) schreiben könntest? Premature und so :p
Übrigens wäre Char ein Funktionstemplate, kein Klassentemplate.
Dann hätte ich aber eine Minute länger gebraucht, um den Code zu entwickeln. Das war bloß ein schneller Hack, um Hacker zu erklären, was das ungefähr ist, was du da meinst.
(signed) Überlauf ist übrigens gänzlich undefined.
-
SeppJ schrieb:
314159265358979 schrieb:
SeppJ schrieb:
Damit c auf jeden Fall ungleich C ist.
Dabei kann ein Überlauf auftreten, was zu implementation-defined behavior führt. Desweiteren habe ich zum Verstehen des Codes nun eine Minute länger gebraucht.
Warum diesen "Hack" verwenden, wenn du auch einfach if(is >> c && c != C) schreiben könntest? Premature und so :p
Übrigens wäre Char ein Funktionstemplate, kein Klassentemplate.
Dann hätte ich aber eine Minute länger gebraucht, um den Code zu entwickeln. Das war bloß ein schneller Hack, um Hacker zu erklären, was das ungefähr ist, was du da meinst.
Was das war, habe ich in der ersten Sekunde erkannt, ich wollte nur wissen ob das irgendwie in der Standardbibliothek vorkommt (vielleicht C++11-bezogen oder so ^^). War anscheinend eine PI-Exotik.
-
SeppJ schrieb:
Dann hätte ich aber eine Minute länger gebraucht, um den Code zu entwickeln.
Soll das ein Witz sein?
SeppJ schrieb:
Das war bloß ein schneller Hack, um Hacker zu erklären, was das ungefähr ist, was du da meinst.
Und wie man an Hackers Nachfrage erkennt, ist er zum Erklären ungeeignet. Zumindest ein Kommentar hätte da hingehört, wenn du es nicht "ordentlich" machst.
SeppJ schrieb:
(signed) Überlauf ist übrigens gänzlich undefined.
Das ist mir wiederum neu.
-
314159265358979 schrieb:
Und wie man an Hackers Nachfrage erkennt, ist er zum Erklären ungeeignet.
Und wie man an deiner "Meinung" erkennt, liegt deine soziale Kompetenz mal wieder irgendwo bei 0.
-
Wie bitte? oO
-
314159265358979 schrieb:
SeppJ schrieb:
Dann hätte ich aber eine Minute länger gebraucht, um den Code zu entwickeln.
Soll das ein Witz sein?
Wie soll ich deine Konstrukte aus dem Handgelenk 1:1 reproduzieren?
SeppJ schrieb:
Das war bloß ein schneller Hack, um Hacker zu erklären, was das ungefähr ist, was du da meinst.
Und wie man an Hackers Nachfrage erkennt, ist er zum Erklären ungeeignet. Zumindest ein Kommentar hätte da hingehört, wenn du es nicht "ordentlich" machst.
Deswegen ist auch ein entsprechender Kommentar dabei
. Außerdem ist das ordentlich und eine Standardvorgehensweise (wie dir Ethon erklärt hat). Es ist bloß nicht 1:1 wie du es bei dir hast. Und das ist in der Regel sogar ein gutes Zeichen.
Das ist mir wiederum neu.
Und du wunderst dich ernsthaft noch, wieso du mit der Kombination aus Unwissenheit und "ich habe immer auf jeden Fall Recht" so unbeliebt bist?
-
Edit: Einen weiter unten.
-
STOOOOOOPPP!!!! Du meintest der Hack ist zum erklären ungeeignet?
Gott bin ich bescheuert