Странная ошибка утверждения для логических и логических переменных

Некоторые утверждения в моем коде просто начали вести себя странно, и мне было интересно, не было ли у кого-нибудь подобной ситуации раньше. Фрагмент кода, например:

#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, но поскольку это усложняет вопрос, я отредактирую его более подробно, только если сообщество сочтет это уместным.

7
задан penelope 3 April 2012 в 10:00
поделиться