在VC++中,我們有數據類型「BOOL」,它可以假定值爲TRUE或FALSE,並且我們有數據類型「bool」,它可以假設值爲true或false。區別布爾和布爾?
它們之間以及每種數據類型何時應該使用的區別是什麼?
在VC++中,我們有數據類型「BOOL」,它可以假定值爲TRUE或FALSE,並且我們有數據類型「bool」,它可以假設值爲true或false。區別布爾和布爾?
它們之間以及每種數據類型何時應該使用的區別是什麼?
bool
是內置的C++類型,而BOOL
是定義爲int
的Microsoft特定類型。您可以在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
。
要添加什麼luvieere說,你可以從一個函數返回其他的東西比TRUE
或FALSE
返回BOOL
例如,
BOOL myFunc(int a)
{
if (a < 3) return FALSE;
else if (a > 3) return TRUE;
else return 2;
}
這是可能的,因爲BOOL
本質上是一個int
。
請注意,這是不可取的,因爲它嚴重破壞了代碼的一般可讀性,但它是你可以遇到的,你會想知道爲什麼它是如此。
+1表示這是一個非常糟糕的主意。使用BOOL的全部理由是將值限制爲TRUE/FALSE;如果你想'int'你應該使用'int'。 –
Windows API在將bool
引入C++之前有此類型。這就是爲什麼它仍然在使用BOOL的所有Windows功能中退出。 C不支持bool
數據類型,因此BOOL
必須留下。
C99標準確實包含了一個bool類型,儘管絕大多數C編譯器直到最近才支持bool。 – PeterAllenWebb
sizeof(BOOL)在64位Windows機器上仍然是4。將自身與編譯器類型實現隔離是存在這些類型定義的原因。 –
@Hans刪除了64位引用。 – luvieere
警告:sizeof(bool)未在Microsoft C++中指定,並且在C++ 4.2和5.0之間從4字節更改爲1字節(請參閱http://msdn.microsoft.com/zh-cn/en-use/library/tf4dy80a。 aspx) – eFloh