В C++ булев тип данных именуется bool, а слова true и false являются ключевыми.
В C булев тип данных именуется _Bool, но при включении заголовочного файла <stdbool.h> можно пользоваться ключевыми словами bool, true, false.

Объект типа bool может принимать одно из двух значений: true и false.
Например:
Пример 1
// инициализация строки 
string search_word = get_word(); 

// инициализация переменной found 
bool found = false; 

string next_word; 
while ( cin >> next_word ) 
if ( next_word == search_word ) found = true;
 // ... 

// сокращенная запись: if ( found == true ) 
if ( found ) 
cout << "ok, мы нашли слово\n"; 
else cout << "нет, наше слово не встретилось.\n"; 

Хотя bool относится к одному из целых типов, он не может быть объявлен как signed, unsigned, short или long, поэтому приведенное определение ошибочно:
Пример 2
// ошибка 
short bool found = false; 

Объекты типа bool неявно преобразуются в тип int. Значение true превращается в 1, а false – в 0. Например:
Пример 3
bool found = false; 
int occurrence_count = 0; 

while ( /* mumble */ ) 
{ found = look_for( /* something */ ); 
// значение found преобразуется в 0 или 1 
occurrence_count += found; } 

Таким же образом значения целых типов и указателей могут быть преобразованы в значения типа bool. При этом 0 интерпретируется как false, а все остальное как true:
Пример 4
// возвращает количество вхождений 
extern int find( const string& ); 
bool found = false; 
if ( found = find( "rosebud" )) 
// правильно: found == true 

// возвращает указатель на элемент 
extern int* find( int value ); 

if ( found = find( 1024 )) 
// правильно: found == true