Можно ли считать (bool) true == (int) 1 для любого компилятора С++?

Можно ли считать (bool)true == (int)1 для любого компилятора С++?

Ответ 1

Да. Броски являются излишними. В вашем выражении:

true == 1

Прилагается интегральное продвижение, а значение bool будет повышаться до int, и эта акция должна дать 1.

Ссылка: 4.7 [conv.integral]/4: Если тип источника bool... true преобразуется в один.

Ответ 2

Ответ Чарльза Бейли правильный. Точная формулировка из стандарта С++ (§4.7/4): "Если тип источника - bool, значение false преобразуется в ноль, а значение true преобразуется в единицу".

Изменить: я вижу, что он добавил ссылку, - я скоро удалю это, если не отвлекусь и не забуду...

Edit2: опять же, вероятно, стоит отметить, что, в то время как сами логические значения всегда преобразуются в ноль или один, ряд функций (особенно из стандартной библиотеки C) возвращает значения, которые являются "в основном логическими", но представлены как int, которые обычно должны быть равны нулю, чтобы указать false или ненулевое значение для указания истины. Например, функции * в <ctype.h> требуют только нулевой или ненулевой, не обязательно нулевой или один.

Если вы нарисуете это на bool, ноль преобразуется в значение false, а не от нуля до истины (как и следовало ожидать).

Ответ 3

Согласно стандарту, вы должны быть в безопасности с этим допущением. Тип С++ bool имеет два значения - true и false с соответствующими значениями 1 и 0.

Вещь, о которой нужно следить, это смешивать выражения bool и переменные с выражением и переменными bool. Последнее определяется как FALSE = 0 и TRUE != FALSE, что довольно часто на практике означает, что любое значение, отличное от 0, считается true.

Многие современные компиляторы действительно выдадут предупреждение для любого кода, который неявно пытается использовать от bool до bool, если значение bool отличается от 0 или 1.

Ответ 4

Я нашел, что разные компиляторы возвращают разные результаты в true. Я также обнаружил, что почти всегда лучше сравнивать bool с bool вместо int. Те, как правило, меняют стоимость с течением времени, когда ваша программа развивается, и если вы считаете, что она истинна как 1, вы можете быть укушены несвязанным изменением в другом месте вашего кода.

Ответ 5

Нет, TRUE может быть произвольным среди компиляторов. Некоторые будут использовать 1, некоторые -1 (все биты, подписанные var), другие компиляторы могут использовать другое значение. Даже если значение стандартизировано, не все компиляторы могут следовать стандарту.

FALSE, однако, это когда все биты ясны, что происходит только для числового значения 0.