Не следует ли использовать static_cast
для преобразования int в bool, поскольку он преобразует обратное неявное преобразование, но я все еще получаю предупреждение?
Пример:
MSVС++ 8
bool bit = static_cast<bool>(100);
Не следует ли использовать static_cast
для преобразования int в bool, поскольку он преобразует обратное неявное преобразование, но я все еще получаю предупреждение?
Пример:
MSVС++ 8
bool bit = static_cast<bool>(100);
Просто потому, что преобразование a = > b неявно не говорит ничего о жизнеспособности обратного, b = > a.
В вашем случае вы не должны бросать вообще. Просто сделайте очевидную вещь: сравните:
bool result = int_value != 0;
Это единственный логически правильный способ преобразования int
в bool
, и он делает код более читаемым (потому что он делает допущения явными).
То же самое относится и к обратному. Непосредственно преобразование из bool
в int
является ленивым. Сделать отображение явным:
int result = condition ? 1 : 0;
Что между вами и вашим компилятором, но Microsoft думает, что вы должны написать:
i != 0
предпочитая либо:
(bool)i
или
static_cast<bool>(i)
Возможные причины его предпочтения включают:
if (buf != NULL)
или if (buf != 0)
вместо if (buf)
после вызова malloc
,Я не уверен, почему это происходит, когда вы явно его используете (я думаю, это было предупреждение о производительности?), но я обычно использую такой код, чтобы избежать любых предупреждений:
int i;
bool b = (0!=i);
Это никогда не дает предупреждений.
Я как-то уже писал:
bool result = int_value != 0;
Это проще сделать imo и более интуитивно понятным, чем пытаться использовать целое число для bool.