Некоторые утверждения в моем коде только начали странно себя вести, и мне было интересно, была ли у кого-то подобная ситуация раньше. Короткий фрагмент кода, например:
#include <cassert>
class A{
protected:
bool isM, isN;
public:
void someFunction();
};
A::someFunction(){
assert (this->isM && this->isN);
...
}
дает результат assertion failed
. С другой стороны, после незначительного изменения кода:
A::someFunction(){
assert(this->isM);
assert(this->isN);
...
}
утверждения проходят без проблем и функция завершается нормально. Завершение функции обычно является ожидаемой функциональностью, поскольку переменные bool
устанавливаются перед фактическим вызовом someFunction()
.
В качестве дополнительного вопроса, есть ли лучший способ сделать утверждения в C ++? Я вырос на C и до сих пор использую утверждения в стиле C. Я только что поцарапал поверхность Google на этом, но не нашел ничего намекающего, что есть что-то новое.
Да, и, если необходимо, я могу предоставить больше контекста для класса и переменных, если этого недостаточно, чтобы кто-либо смог распознать проблемную ситуацию. Переменные bool
фактически устанавливаются в экземпляре подкласса, тогда как someFunction
является одной из редких функций, реализованных в интерфейсе class A
, но, поскольку это усложняет вопрос, я отредактирую его более подробно, только если сообщество считает это актуальным.