[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