У нас было задание для нашего класса, где мы должны были создать игру в крестики-нолики . Люди любят усложнять себя, поэтому они написали сложные игры, которые включали меню. В конце игры вам нужно было снова сыграть или выйти из программы. Для этого я использовал int
переменную, но заметил, что некоторые одноклассники используют BOOL.
Это более эффективно? В чем разница между хранением ответа, в котором должны храниться только два значения, int
а не в буле? Каково точное назначение этих переменных?
int
- сохранить целое число, а цельbool
- сохранить логическое значение (true
илиfalse
). Использованиеbool
IMO отражает его использование гораздо лучше, чем использованиеint
.typedef int Bool
для того, чтобы дать понять, что они используют логическое значение. C ++ интегрировал поддержкуbool
языка, как и C99 с (довольно некрасивым)_Bool
ключевым словом.bool
», а о том, почему у нас разные имена для похожих типов (напримерlength_t
), и почему важно, чтобы компилятор проверял типы.Ответы:
При выборе типов переменных и имен переменных вы хотите, чтобы ваше намерение было максимально четким. Если вы выберете
bool
(логический) тип, становится ясно, что есть только два допустимых значения:true
илиfalse
. Если вы используетеint
(целочисленный) тип, больше не ясно, что намерение этой переменной может быть только 1 или 0 или любыми значениями, которые вы выбрали для значенияtrue
иfalse
. Плюсsizeof(int)
обычно возвращается как 4 байта, в то время какsizeof(bool)
возвращается 1.источник
Кажется , во всех (до сих пор) собраны ответы никто не поймал тот факт , что ОП говорил о
BOOL
неbool
.Поскольку вопрос помечен C ++, следует отметить, что:
int
представляет собой целое число , которое находится в пределах отINT_MIN
доINT_MAX
- макросы , определенные в<climits>
которых значения зависят от архитектуры хостинга машины. В C ++ эти значения также доступны какstd::numeric_limits<int>::min()
и...:max()
соответственно). Поведение булевых операторов, применяемых дляint
обработки0
как ложных, а все остальное как истинных .BOOL
это просто подсказка, предлагающая логическое поведение для int. Определяется<cstddef>
какBOOL
это не что иное, как синтаксический сахар, для чего - компилятором - это не что иное, как int. Это то, что используют программисты на C, но программисты на C ++ должны избегать, поскольку C ++ имеетbool
.bool
является языком интегрального типа, значение которого поддерживается толькоtrue
иfalse
. Когда преобразовано вint
true
становится 1 иfalse
становится 0.Важным аспектом является то, что он более безопасен от ошибок программирования:
невозможно кодировать с правильным типом bool:
Использование
BOOL
вместоbool
- это просто плохая привычка, унаследованная от славного прошлого, которую никто до сих пор не может забыть, создавая тем самым старую проблему для менее славного завтрашнего дня.Учителя языка должны серьезно подумать об этом!
источник
Типы Bool меньше, чем типы Int, поэтому занимают меньше места в памяти. В зависимости от системы, которую вы компилируете в / для, значение Int может быть 4–8 байтов, тогда как значение Bool составляет 1 байт (как можно увидеть в этой статье MSDN )
Сопоставьте это с некоторыми аспектами KISS и хорошим дизайном программы, и станет понятно, почему лучше использовать bool для хранения переменной, которая будет иметь только 2 значения.
Зачем усложнять вещи объектом, который может хранить широкий диапазон значений, если вы уверены, что вам нужно хранить только 1 из 2 различных значений?
Что происходит в системе, которая использует int, если вы храните там 75? Если вы добавили дополнительные условия
или
тогда вы прикрыты для этой ситуации. Но если нет, значит нет.
Вы также можете иметь случай (в зависимости от того, как вы изменяете значение int), когда у вас переполнение буфера, и значение «сбрасывается» обратно до 0 или нижней границы вашего int (который может быть где-то в область от -127 до -9,223,372,036,854,775,808, в зависимости от вашей целевой архитектуры ) что тогда происходит в вашем коде?
Однако, если вы использовали bool, вы могли бы использовать что-то вроде этого:
Или даже:
или даже:
В зависимости от вашего компилятора могут быть оптимизации, которые он может выполнять в коде, который использует Bools для хранения сопоставленных значений true / false. Принимая во внимание, что не может быть оптимизаций, которые он может выполнить для Ints, используемых для хранения сопоставленных значений true / false.
Мы также должны помнить, что C ++ (наряду с C, Assembly и FORTRAN) используется для написания очень эффективного, небольшого и быстрого кода. Таким образом, в этом случае было бы лучше использовать Bool, особенно если вы отмечаете использование переменных, памяти, кэша или процессорного времени.
Похожий вопрос: зачем мне хранить целое число (значение) в float? Ответ: не стоит, потому что нет смысла.
Короче говоря: как ваш учитель / репетитор / лектор / профессор, чтобы обсудить с вами размеры различных типов ценностей (в случае, если вы пропустили это), и почему они важны для разработки программного обеспечения.
Я надеюсь, что это поможет в качестве отправной точки (я также надеюсь, что это не выглядит как педантичный)
источник
return value >= 0;
для первого примера.Цель здесь - ясность намерения. Тип возвращаемого значения является частью интерфейса функций, и a
bool
говорит вам больше о том, что ожидать от функции, чемint
делает.Даже
BOOL
более выразительный, чемint
, хотя это тот же тип, он по крайней мере показывает ваши намерения.Тем не менее, ни один из них я бы не рекомендовал:
источник
В программировании вы хотите представить что-то из реальной жизни в коде. Несмотря на то, что int и bool могут делать то же самое, основная идея совершенно другая: при использовании bool ответ может быть да или нет; и это все, это намерение. С целыми числами вы можете представлять количество без десятичной точки. И в том же духе, почему вы выбираете целое число, если двойник может сделать то же самое? Если целое число имеет больше смысла, чем двойное при моделировании задачи, тогда вы можете выбрать int.
источник
Потому что, в конце концов, вы все равно преобразуете свое целое число в логическое: «если (i = 1), тогда играйте в другую игру». В этой ситуации (i = 1) преобразуется в true или false: логическое значение.
источник
if (i = 1)
что, вероятно, это очень неправильно в своем коде.