Почему кто-то использует int вместо типа данных bool? - PullRequest
0 голосов
/ 22 мая 2019

Недавно я увидел в одном проекте, где они вводят int как BOOL и используют его вместо bool.Это дает какие-то преимущества?

typedef int BOOL;

Ответы [ 2 ]

6 голосов
/ 22 мая 2019

Можно было бы сделать это, если бы они много взаимодействовали с C-кодом. Поскольку C не имеет типа bool - по крайней мере, до C11 (думаю, возможно, или C99) ввел тип _Bool - который я не могу честно вспомнить, совместим ли он с C ++ bool - они должен был только что принять ключевое слово bool (ИМХО), но я отвлекся.

Кроме того, это распространено в старых базах кода C ++, предшествующих стандарту C ++ 98, где C ++ получил bool.

Итак legacy и C совместимость - это ответ.

1 голос
/ 23 мая 2019

C не имел выделенного логического типа до стандарта 1999 года - любой скаляр с ненулевым значением считался «истинным», а нулевое значение - «ложным». Общепринятым соглашением было использование макросов и / или typedef для создания логических значений:

#define BOOL int
#define TRUE (1)
#define FALSE (0)

или

typedef int bool;
static const bool true = 1;
static const bool false = 0;

или что-то подобное.

Итак, вы просматриваете либо старый (до C99) код C, либо код, написанный кем-то, кто изучил C до выхода этого стандарта.

Обратите внимание, что C по-прежнему считает любое ненулевое скалярное значение "истинным", а управляющие выражения в операторах if и for и while/do while не обязательно должны иметь булевы типы , Так как он был получен из C, то же самое верно и для C ++, хотя он также имеет выделенные логические типы и операторы.

...