Предупреждение 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); } Ответ 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, и многие разработчики все еще используют их.
Ответ 1 FYI: Casts не скроет предупреждение по дизайну. Что-то вроде return (id & MID_NUMBER) != 0; должно четко указывать "Я хочу проверить, равен ли это значение нулю или нет" и позволить компилятору быть счастливым
Ответ 3 Где объявление id и MID_NUMBER? Вы уверены, что они не BOOLs в стиле windef, а не (строчные) bool? BOOL были на ветру в течение десятилетий typedef'd как int; они предписывают правильный С++ bool, и многие разработчики все еще используют их.