Aczkolwiek typ ten nie jest wcale jakiś super, bo zajmuje 1 bajt, czyli znacznie więcej niż faktycznie przechowuje informacji.
Wyobrażasz sobie inaczej? Bajt to z definicji najmniejsza komórka pamięci możliwa do zaadresowania, a do zmiennej musi dać się pobrać adres.
Zresztą to ma znaczenie dopiero, gdybyś miał bardzo dużo tych booli. I tu standard przychodzi z pomocą: vector<bool>
może, choć nie musi, być zaimplementowany jako trzymający elementy na bitach, a nie bajtach.
Zarówno w C jak i C++ istnieje typ logiczny. Jeśli jakiś kompilator tego nie obsługuje, to to jest wada kompilatora. Bo rozmawiamy o języku, czyli o jego standardzie.
Ale osobny typ bool
to tylko część problemu.
Nierozwiązanym problemem jest łatwość pomyłki w wyrażeniach warunkowych:
int a=0; if (a=1) printf("a jest 1\n");
warunek jest zawsze spełniony, a o taki błąd bardzo łatwo.
trudniej o tę pomyłkę w C#, gdzie int
nie rzutuje się na bool
samoczynnie, więc taki kod nie przejdzie.