C++/C bool != true и false
От: Jukier  
Дата: 26.06.14 18:37
Оценка: -1 :)
Есть способ получить переменную bool не равную ни true, ни false. При этом разные компиляторы работают по-разному. В Microsoft 2005 в следующем фрагменте кода можно сравнивать переменную b c true или false, и мы зайдем в else (если мне не изменяет память). В gcc (точно в последних версиях) уже необходимо сравнивать с функцией bool g(), чтобы зайти в else.

Есть два вопроса:
1. Какое поведение должно быть по стандарту, может ли переменная типа bool быть не равна ни true, ни false?
2. Какое поведение в других компиляторах/версиях?

#include <stdio.h>

int f()
{
    return 4;
}

bool g()
{
    return true;
}

int main() {

    //bool b = reinterpret_cast<bool (*)()>(f)();
    bool b = ((bool (*)())f)();

    if (b == g()) // b == true
    {
        printf("true");
    }
    else if (b == !g()) // b == false
    {
        printf("false");
    }
    else
    {
        printf("bool is not equal to true or false");
    }

    return 0;
}


P.S. Аналогичная ситуация с языком C и типом _Bool, не равным ни 1, ни 0.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.