При программировании на Visual C ++, я думаю, каждый разработчик время от времени видит предупреждение
warning C4800: 'BOOL' : forcing value to bool 'true' or 'false'
.Очевидно, причина в том, что BOOL определяется как int, и непосредственное присвоение любого из встроенных числовых типов bool
считается плохой идеей.
Так что мой вопрос сейчас, учитывая любой встроенный числовой тип(int, short, ...), который должен интерпретироваться как логическое значение, каков / ваш предпочтительный способ фактического сохранения этого значения в переменную типа bool
?
Примечание: Хотя смешивание BOOL и bool, вероятно, является плохой идеей, я думаю, что проблема неизбежно возникнет как в Windows, так и в другом месте, поэтому я думаю, что этот вопрос не относится ни к Visual-C ++, ни к Windows.
Учитывая int nBoolean;
Я предпочитаю этот стиль:
bool b = nBoolean?true:false;
Возможны следующие варианты:
Есть ли вообще предпочтительный способ?Обоснование?
Я должен добавить: поскольку я работаю только с Visual-C ++, я не могу точно сказать, является ли это вопросом, специфичным для VC ++, или же такая же проблема возникает с другими компиляторами.Поэтому было бы интересно услышать от g ++ или пользователей, как они обрабатывают случай int-> bool.
Относительно стандарта C ++: как отмечает Дэвид Торнли в комментарии, стандарт C ++ не требует такого поведения.На самом деле, кажется, это явно разрешено, поэтому можно считать это странностью VC ++.Процитируем черновик N3029 (который есть у меня в атм.):
4.12 Булевы преобразования [conv.bool]
Значение арифметики, перечисление с незаданной областью, указатель илиуказатель на тип члена может быть преобразован в значение типа bool.Нулевое значение, нулевое значение указателя или нулевое значение указателя члена преобразуется в ложь;любое другое значение преобразуется в true.(...)