Erster C++-Gehversuch, Feedback erwünscht
-
asdfasd schrieb:
Und genaugenommen ist #pragma once kein Standardkonformes C++ (oder hat sich das inzwischen geändert?)
Pragma-Direktiven sind definitionsgemäß implementationsspezifisch und damit kein Teil des C++ Standards auch wenn diese mittlerweile meines Wisens nach von allen gängigen Compilern unterstützt wird.
-
Stummi schrieb:
../MagicSquare.hpp:93:43: error: ‘this’ was not captured for this lambda function
Ja, du musst noch this capturen, sonst kann das Lambda keine Memberfunktionen aufrufen.
Einfach this in die eckigen Klammern schreiben.
-
asfdlol schrieb:
Diesen Operator gibt es nicht.
Tatsächlich! Ich werd' verrückt! Bist du gerade in der Zeit zurückgereist und hast diesen Operator aus jeglichen Standardisierungen von C und C++ entfernt?
Gut, schreiben wir es aus, immer noch besser:
empty = empty || !cell;Die Zeile wird Arcoth gefallen.
Ist es vom Standard definiert dass
true | falsewiederumtrueoderfalseergibt? Siehe auch hier.Dein Codebeispiel bringt mir aber einen Fehler:
Upsi. Schreib das Lambda in beiden Fällen zu
[this] (int idx) {return get_cell(idx, idx);}um, und probier' noch mal.
-
funktionszeiger statt funktionsobjekt ist lahmer.
Ein Funktionszeiger ist ein Funktionsobjekt. Ein Funktionsobjekt ist dadurch definiert dass man es wie eine Funktion aufrufen kann. Und was heißt "Lahm"*? Ich hoffe "uncooler".
Übrigens:
if (!check_diag1() || !check_diag2()) { return false; } return true;
return check_diag1() && check_diag2();De Morgansche Gesetze und so.
* Außenverteidiger!
-
Arcoth schrieb:
Tatsächlich! Ich werd' verrückt! Bist du gerade in der Zeit zurückgereist und hast diesen Operator aus jeglichen Standardisierungen von C und C++ entfernt?
Das hab ich damals schon vor Ort vollbracht.

Spass beiseite. Die Tatsache, dass diese Operatoren und dass der ^^-Operator (Logisch-XOR) fehlen haben mich schon aufgeregt.Arcoth schrieb:
Ist es vom Standard definiert dass
true | falsewiederumtrueoderfalseergibt? Siehe auch hier.Darüber habe ich mir auch schon Gedanken gemacht. Einmal hat jemand hier im Forum einen Ausschnitt aus dem Standard gepostet (das war SeppJ glaub ich, ich finde den Beitrag jedoch nicht mehr, das ist ein Weilchen her, vermutlich noch auf einem meiner alten Accouts), dass dies (und dasselbe mit XOR) wohldefiniert ist. Nachdem camper in dem von dir verlinkten Thread etwas anderes (und genaueres) geschrieben hat bin ich unsicher.
-
Arcoth schrieb:
funktionszeiger statt funktionsobjekt ist lahmer.
Ein Funktionszeiger ist ein Funktionsobjekt. Ein Funktionsobjekt ist dadurch definiert dass man es wie eine Funktion aufrufen kann. Und was heißt "Lahm"*? Ich hoffe "uncooler".
Übrigens:
if (!check_diag1() || !check_diag2()) { return false; } return true;
return check_diag1() && check_diag2();De Morgansche Gesetze und so.
* Außenverteidiger!
Nöö, das war schon sehr gut so.
-
asfdlol schrieb:
Arcoth schrieb:
Tatsächlich! Ich werd' verrückt! Bist du gerade in der Zeit zurückgereist und hast diesen Operator aus jeglichen Standardisierungen von C und C++ entfernt?
Das hab ich damals schon vor Ort vollbracht.

Spass beiseite. Die Tatsache, dass diese Operatoren und dass der ^^-Operator (Logisch-XOR) fehlen haben mich schon aufgeregt.Den ^^ gibts, nur heißt er !=.
-
volkard schrieb:
Den ^^ gibts, nur heißt er !=.
Ich hab zwar keine Ahnung wie
bools miteinander verglichen werden, aber wenn die oberen Bits über dem achten unspezifiziert sind, dann kann so ein!=doch schief gehen, oder? Oder wird beim Vergleich nur das LSB betrachtet?Edit: Ich sage besser nichts dazu, ich weiss nicht was der Standard über
bools aussagt. Nicht auf mich hören also!
-
asfdlol schrieb:
volkard schrieb:
Den ^^ gibts, nur heißt er !=.
Ich hab zwar keine Ahnung wie
bools miteinander verglichen werden, aber wenn die oberen Bits über dem achten unspezifiziert sind, dann kann so ein!=doch schief gehen, oder? Oder wird beim Vergleich nur das LSB betrachtet?Edit: Ich sage besser nichts dazu, ich weiss nicht was der Standard über
bools aussagt. Nicht auf mich hören also!Ich geh einfach mal davon aus, dass Vergleiche für bools schon definiert sind und zwei gleiche immer gleich sind und nicht auf einmal verschieden, wenn da anderer Müll ist. Das wäre sonst ziemlich blöd.
-
asfdlol schrieb:
Arcoth schrieb:
Ist es vom Standard definiert dass
true | falsewiederumtrueoderfalseergibt? Siehe auch hier.Darüber habe ich mir auch schon Gedanken gemacht. Einmal hat jemand hier im Forum einen Ausschnitt aus dem Standard gepostet (das war SeppJ glaub ich, ich finde den Beitrag jedoch nicht mehr, das ist ein Weilchen her, vermutlich noch auf einem meiner alten Accouts), dass dies (und dasselbe mit XOR) wohldefiniert ist. Nachdem camper in dem von dir verlinkten Thread etwas anderes (und genaueres) geschrieben hat bin ich unsicher.
true | false ergibt 1
Was ich in dem Thread geschrieben habe bezog sich auf die ABI - mithin das was nach der Übersetzung in Assembler-/Maschinencode zu beachten ist. Mit dem Verhalten auf der Ebene von C++ hat das nichts zu tun: | führt erst mal die gewöhnlich arithmetischen Konvertierungen auf beiden Operanden aus (weil es nur für int und größere integrale Typen definiert ist). Und die Konvertierung von bool nach int ergibt immer 1 bzw. 0 für true bzw. false.