2011-06-21 149 views
26

在VC++中,我們有數據類型「BOOL」,它可以假定值爲TRUE或FALSE,並且我們有數據類型「bool」,它可以假設值爲true或false。區別布爾和布爾?

它們之間以及每種數據類型何時應該使用的區別是什麼?

回答

30

bool是內置的C++類型,而BOOL是定義爲int的Microsoft特定類型。您可以在windef.h找到它:

typedef int     BOOL; 

#ifndef FALSE 
#define FALSE    0 
#endif 

#ifndef TRUE 
#define TRUE    1 
#endif 

bool值是truefalse,而對於BOOL你可以使用任何int價值,但TRUEFALSE宏在windef.h頭文件中定義。

這意味着,操作者sizeof將產生1 bool(標準狀態,雖然,的bool的大小被定義實現),和4 BOOL

來源:Codeguru article

+5

sizeof(BOOL)在64位Windows機器上仍然是4。將自身與編譯器類型實現隔離是存在這些類型定義的原因。 –

+0

@Hans刪除了64位引用。 – luvieere

+5

警告:sizeof(bool)未在Microsoft C++中指定,並且在C++ 4.2和5.0之間從4字節更改爲1字節(請參閱http://msdn.microsoft.com/zh-cn/en-use/library/tf4dy80a。 aspx) – eFloh

7

要添加什麼luvieere說,你可以從一個函數返回其他的東西比TRUEFALSE返回BOOL例如,

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

這是可能的,因爲BOOL本質上是一個int

請注意,這是不可取的,因爲它嚴重破壞了代碼的一般可讀性,但它是你可以遇到的,你會想知道爲什麼它是如此。

+6

+1表示這是一個非常糟糕的主意。使用BOOL的全部理由是將值限制爲TRUE/FALSE;如果你想'int'你應該使用'int'。 –

10

Windows API在將bool引入C++之前有此類型。這就是爲什麼它仍然在使用BOOL的所有Windows功能中退出。 C不支持bool數據類型,因此BOOL必須留下。

+2

C99標準確實包含了一個bool類型,儘管絕大多數C編譯器直到最近才支持bool。 – PeterAllenWebb