Некоторые утверждения в моем коде просто начали вести себя странно, и мне было интересно, не было ли у кого-нибудь подобной ситуации раньше. Фрагмент кода, например:
#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
является одной из редких функций, реализованных в интерфейсе класса A
, но поскольку это усложняет вопрос, я отредактирую его более подробно, только если сообщество сочтет это уместным.