[linux-l] Designfrage bzgl. Deckverwaltung
Steffen Dettmer
steffen at dett.de
Mo Nov 14 23:32:40 CET 2005
* Frank Reker wrote on Thu, Nov 10, 2005 at 12:01 +0100:
> Am Wed 09. Nov 2005 22:49 +0000 schrieb Steffen Dettmer:
>
> >* Axel Weiß wrote on Sat, Nov 05, 2005 at 12:25 +0100:
> >> enum E {Name1, Name2, Name3, count_E} e;
> >> for (e=Name1; e<count_E; ++e) ...
> >
> >Da war ich ja erst überrascht, aber es geht gar nicht:
> >error: no match for `++ main()::E&' operator
>
> obiger code funktioniert in c. c++ hat ein etwas strengeres
> typkonzept. es ist hier noetig explizit zu casten:
>
> for (e=(int)Name1; e<(int)count_E; ++(int)e) ...
(int) in C, nicht C++. In C++ müsste man schreiben:
for (e=reinterpret_cast<E>(Name1);
usw.
(Ich bete mal, dass static_cast<> bei so einem Blödsinn nicht
funktioniert).
[zweite Mail]
> for (int i=Name1; i<count_E; ++i) ...
> funktioniert auch ohne cast!
Scheisse, tatsächlich, welch ein Bug!
> dann funktioniert's auch in c++.
>
> >enum E {Name1 = 0x01, Name2 = 0x10, Name3 = 0x03, count_E = 0x00} e;
>
> dann hast du ne ziemlich lang laufende schleife, halt bis zum
> naechsten integer overflow.
Eben, und daher kann man mit enums nicht rechnen. Macht ja auch keinen
Sinn: "for (farbe = rot; farbe <= gelb; farbe++)" oder was?
Schade, dann man in C++ so Äpfel und Biernen vergleichen kann, wenn man
sie über for iteriert.
> >> typedef enum farbe{
> >> Karo = 9,
> >> Herz = 10,
> >> Pik = 11,
> >> Kreuz = 12
> >> } farbe;
> >
> >Dann geht aber "spielwert = farbe * spiel" nicht, weil farbe ja eben
> >kein int ist, und nichtmal "Karo < Pik" geht noch.
>
> casten! - s.o.: c castet hier automatisch, c++ nicht.
Natürlich kann man in C++ den Sinn auch abschalten, klar. Kann kann auch
&farbe in einen Funktionspointer casten. Man kann sich auch ein Loch ins
Kniebohren. Man kann auch inline-C oder inline-Assembler rausholen,
sicher.
Aber wir waren ja bei C++ :-)
> >Na ja, vielleicht bin ich da besonders abgeneigt, weil ich schon
> >ziemlich viel code von "flexiblen" (GEHACKTEN!) Zeiger"algorithmik" auf
> >saubere Referenz"algorithmik" umstellen musste.
>
> is natuerlich geschmacksache. aber ich benutze fast nie referenzen.
> bei einem pointer sieht man wenigstens was man uebergibt. referenzen
> erschweren find ich, die lesbarkeit des codes.
Sprach der C-Programmierer? SCNR. :)
oki,
Steffen
--
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.
Mehr Informationen über die Mailingliste linux-l