Algunas afirmaciones en mi código simplemente comenzaron a actuar de forma extraña, y me preguntaba si alguien antes había tenido una situación similar. Un fragmento de código corto, como:Extraño afirmar que no funciona en las variables lógicas y de bool
#include <cassert>
class A{
protected:
bool isM, isN;
public:
void someFunction();
};
A::someFunction(){
assert (this->isM && this->isN);
...
}
produce un resultado assertion failed
. Por otro lado, después de cambiar el código ligeramente:
A::someFunction(){
assert(this->isM);
assert(this->isN);
...
}
las aserciones pasan sin ningún problema y la función finaliza normalmente. El acabado de funciones normalmente es la funcionalidad esperada, ya que las variables bool
se establecen antes de la llamada real al someFunction()
.
Como una pregunta adicional, ¿hay una mejor manera de hacer aserciones en C++? Crecí en C y sigo usando las afirmaciones de estilo C. Acabo de arañar la superficie de Google en esto, pero no encontré nada que sugiera que haya algo nuevo.
Ah, y si es necesario, puedo proporcionar más contexto para la clase y las variables si esto no es suficiente para que alguien pueda reconocer la situación problemática. Las variables bool
se configuran realmente en una instancia de una subclase, mientras que someFunction
es una de las pocas funcionalidades implementadas en la interfaz class A
, pero como esto complica la pregunta, solo la editaré con más detalle si la comunidad lo considera relevante.
¿quiere decir que las variables 'bool' se establecen antes de la llamada a' someFunction() '? – juanchopanza
¿Los bools están configurados o no? – dexametason
C++ 11 trae 'static_assert', que es una aserción en tiempo de compilación. Creo que también está disponible en boost para versiones anteriores de C++. – RedX