Einige Behauptungen in meinem Code begannen gerade seltsam zu handeln, und ich fragte mich, ob jemand eine ähnliche Situation zuvor hatte. Ein kurzer Code-Schnipsel wie:Strange assert fail on logische und bool Variablen
#include <cassert>
class A{
protected:
bool isM, isN;
public:
void someFunction();
};
A::someFunction(){
assert (this->isM && this->isN);
...
}
erzeugt ein assertion failed
Ergebnis. Auf der anderen Seite, nach dem Ändern des Codes nur leicht:
die Zusicherungen bestehen ohne Problem und Funktion endet normal. Funktionsende ist normalerweise die erwartete Funktionalität, da die Variablen bool
vor dem eigentlichen Aufruf an someFunction()
gesetzt werden.
Als eine zusätzliche Frage gibt es eine bessere Möglichkeit Assertions in C++ zu tun? Ich bin auf C aufgewachsen und benutze immer noch die C-Style Assertions. Ich habe gerade Google Oberfläche auf diesem gekratzt, aber nichts gefunden, das andeutet, dass es etwas neues gibt.
Oh, und wenn nötig, kann ich mehr Kontext für die Klasse und die Variablen zur Verfügung stellen, wenn dies nicht ausreicht, um die problematische Situation zu erkennen. Die bool
Variablen werden tatsächlich in einer Instanz einer Unterklasse gesetzt, während someFunction
eine der wenigen Funktionalitäten ist, die in der class A
Schnittstelle implementiert sind, aber da dies die Frage komplizierter macht, werde ich sie nur ausführlicher bearbeiten, wenn die Community dies für relevant hält.
meinst du die 'bool' Variablen werden vor dem Aufruf von' someFunction() 'gesetzt? – juanchopanza
Sind Bools gesetzt oder nicht? – dexametason
C++ 11 bringt 'static_assert', was eine Assertion zur Kompilierung ist. Ich denke, es ist auch auf Boost für frühere C++ - Versionen verfügbar. – RedX