Разница BOOL и bool? - PullRequest
       20

Разница BOOL и bool?

30 голосов
/ 21 июня 2011

В VC ++ у нас есть тип данных «BOOL», который может принимать значение ИСТИНА или ЛОЖЬ, и у нас есть тип данных «bool», который может принимать значение «истина» или «ложь».

В чем разница между ними и когда следует использовать каждый тип данных?

Ответы [ 3 ]

35 голосов
/ 21 июня 2011

bool является встроенным типом C ++, в то время как BOOL является специфическим типом Microsoft, который определяется как int. Вы можете найти его в windef.h:

typedef int                 BOOL;

#ifndef FALSE
#define FALSE               0
#endif

#ifndef TRUE
#define TRUE                1
#endif

Значения для bool: true и false, тогда как для BOOL можно использовать любое значение int, хотя макросы TRUE и FALSE определены в заголовке windef.h. .

Это означает, что оператор sizeof выдаст 1 для bool (однако стандарт утверждает, что размер bool определяется реализацией) и 4 для BOOL.

Источник: Статья Codeguru

14 голосов
/ 21 июня 2011

Windows API имел этот тип до того, как bool был брошен в C ++. И именно поэтому он все еще работает во всех функциях Windows, которые принимают BOOL. C не поддерживает bool тип данных, поэтому BOOL должен остаться.

10 голосов
/ 21 июня 2011

Чтобы добавить к тому, что сказал Лювиер, вы можете вернуть что-то отличное от TRUE или FALSE из функции, возвращающей BOOL, например,

BOOL myFunc(int a)
{
    if (a < 3) return FALSE;
    else if (a > 3) return TRUE;
    else return 2;
}

И это возможно, потому что BOOL - это, по сути, int.

Обратите внимание, что это нежелательно, так как это серьезно нарушает общую читабельность кода, но это то, с чем вы можете столкнуться, и вам будет интересно, почему это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...