59 votes

Est-ce que 'bool' est un type de données de base en C ++?

J'ai eu ce doute lors de l'écriture du code. Est 'bool' une base de type de données défini dans la norme C++ ou est-il une sorte d'extension prévue par le compilateur ? J'ai eu ce doute parce Win32 a 'BOOL' qui n'est rien mais une définition de type long. Aussi ce qui se passe si je fais quelque chose comme ceci:

int i = true;

Est-il "toujours" de la garantie que la variable i va avoir la valeur 1 ou est-ce encore la dépend du compilateur, je suis à l'aide ? En outre, pour certaines Api Win32 qui acceptent BOOL en tant que paramètre qu'advient-il si je passe la variable boolean?

77voto

Johannes Schaub - litb Points 256113

bool est un fondamental de type de données en C++. Convertir true d'un type entier, donnera 1, et la conversion de l' false donnera 0 (4.5/4 et 4.7/4). En C, jusqu'à ce que le C99, il n'y a pas de type de données bool, et les gens ont fait des trucs comme

enum bool {
    false, true
};

Donc, ne l'API Windows. En commençant par le C99, nous avons _Bool comme un type de base de données. Y compris stdbool.h sera typedef #define que bool et de fournir les constantes true et false. Ils ne font pas bool d'une base de données-type (et donc d'un mot-clé) en raison de problèmes de compatibilité avec le code existant.

12voto

James Hopkin Points 8318

Quelques bonnes bases sur les raisons pour lesquelles le C ++ a besoin d'un type bool intégré: Guru of the Week # 26

8voto

jalf Points 142628

Oui, bool est un type intégré.

WIN32 est un code C, pas C ++, et C n’ayant pas de booléen, ils fournissent donc leur propre typedef BOOL.

5voto

hazzen Points 7315

C++ n'beaucoup de automatique de moulage pour vous, si vous avez une variable de type bool et passer à quelque chose dans l'attente d'un int, il sera en int pour vous - 0 pour false et 1 pour true.

Je n'ai pas de standard pour voir si c'est garanti, mais chaque compilateur, j'ai utilisé cette (donc on peut supposer qu'il fonctionnera toujours).

Cependant, s'appuyant sur cette conversion est une mauvaise idée. Code pouvez arrêter la compilation si une nouvelle méthode est ajouté que les surcharges de l' int signature, etc.

2voto

Anish Points 11

Les compilateurs Turbo c et c ++ ne prennent pas en charge le type de données boolean (mot-clé bool), mais le compilateur dev c ++ prend en charge le type de données boolean (mot-clé bool).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X