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