Подтвердить что ты не робот

Предупреждение C4800: "int": принудительное значение bool "true" или "false" (предупреждение о производительности)

У меня есть эта проблема в моем коде:

bool CBase::isNumber()
{
return (id & MID_NUMBER);
}

bool CBase::isVar()
{
return (id & MID_VARIABLE);
}

bool CBase::isSymbol()
{
return (id & MID_SYMBOL);
}
4b9b3361

Ответ 1

FYI: Casts не скроет предупреждение по дизайну.

Что-то вроде

return (id & MID_NUMBER) != 0;

должно четко указывать "Я хочу проверить, равен ли это значение нулю или нет" и позволить компилятору быть счастливым

Ответ 2

Используйте!! идиома eg

bool CBase::isNumber()
{
    return !!(id & MID_NUMBER);
}

Ответ 3

Где объявление id и MID_NUMBER? Вы уверены, что они не BOOLs в стиле windef, а не (строчные) bool? BOOL были на ветру в течение десятилетий typedef'd как int; они предписывают правильный С++ bool, и многие разработчики все еще используют их.