bool Mysterium
-
drakon schrieb:
Du verwechselst da den () mit dem [] Operator.
Du legst da kein Array von 13 bool an, sondern ein bool mit dem Wert 13..
Nö, sondern nen bool mit dem Wert 1.
-
hustbaer schrieb:
drakon schrieb:
Du verwechselst da den () mit dem [] Operator.
Du legst da kein Array von 13 bool an, sondern ein bool mit dem Wert 13..
Nö, sondern nen bool mit dem Wert 1.

Ja, sagen wir so: Er versucht ein bool mit dem Wert 13 zu initialisieren.
-
"Ein bool wird mit dem Wert einer in den Zieltyp konvertierten 13 initialisiert"
-
Danke: alles klar - dummer Fehler, Klammern verwechselt.
Da hätte der Compiler aber mal drauf aufmerksam machen können, ich compiliere schließlich mit -Wall
gibt es einen gcc switch, der solche impliziten Konvertierungen anmahnt ?
-
u_ser-l schrieb:
Da haette der Compiler aber mal drauf aufmerksam machen koennen, ich compiliere schliesslich mit -Wall
es ist ja kein Fehler und auch nichtmal zweideutig...er macht exakt das, was du ihm gesagt hast, du hast ihm nur das falsche gesagt

haettest du einen vector verwendet, waer das nich passiert
an
std::vector<bool> y( 13 );kann man nicht viel falsch machen, ohne das der Compiler meckert
-
ich brauche allerdings äußerst performante Datenstrukturen, denn die Algorithmen werden exponentiell in der Bitlänge laufen, bei Bitlängen zw. 100 und 1000 - bremst vector<bool> da nicht etwas ?
-
gibt es g++ switches, die solche impliziten Casts sicher aufdecken? -Wall -pedantic hat jedenfalls in diesem Fall nicht gemuckt.
-
u_ser-l schrieb:
ich brauche allerdings äußerst performante Datenstrukturen, denn die Algorithmen werden exponentiell in der Bitlänge laufen, bei Bitlängen zw. 100 und 1000 - bremst vector<bool> da nicht etwas ?
dann nimm vector<char>
-
u_ser-l schrieb:
ich brauche allerdings äußerst performante Datenstrukturen, denn die Algorithmen werden exponentiell in der Bitlänge laufen, bei Bitlängen zw. 100 und 1000 - bremst vector<bool> da nicht etwas ?
Schau dir mal std::bitset an.
-
tatsächlich, bitset sieht gut aus, das werde ich mir mal näher ansehen.
-
bei einer länge von max. 1000 wird wohl nichts schneller sein als ein char-array.
wenn es eine absolute obere schranke gibt ggf. auch gleich aufm stack.
ansonsten std::vector<char>.std::vector<bool> und std::bitset<N> sind gut zum platz sparen, aber nicht unbedingt für performance-kritischen code.
aber einfach mal ausprobieren...
-
dank OO-Datenkapselung kann ich leicht
bitset
char-array
vector<bool>
vector<char>
bool-array
vergleichen. Ich vermute auch, daß char-array am schnellsten ist, zumindest solange die ~87% Platzverschwendung nicht zu übermäßigem Speichertraffic führen.
-
genau, solange alles noch in den L1 cache passt auf jeden fall
-
die Bit-Tupel sind bei der Problemstellung ohnehin nur der einfachste Spezialfall für erste Tests, letztendlich brauche ich allgemeine Tupel über {0,..,p-1} mit kleinem p=2,3,5,..., und dann wird sich der ungenutzte Platz pro char noch verringern
