Comment portable est cette conversion. Puis-je être sûr que ces deux affirmations?
int x = 4<5;
assert(x==1);
x = 4>5;
assert(x==0);
Ne me demandez pas pourquoi. Je sais que c'est laid. Je vous remercie.
Comment portable est cette conversion. Puis-je être sûr que ces deux affirmations?
int x = 4<5;
assert(x==1);
x = 4>5;
assert(x==0);
Ne me demandez pas pourquoi. Je sais que c'est laid. Je vous remercie.
int x = 4<5;
Totalement portable. Standard conforme. bool
de int
conversion est implicite!
§4.7/4 de la Norme C++ dit (partie Intégrante de Conversion)
Si la source est de type bool, la valeur
false
est converti à zéroet la valeurtrue
, est converti en un.
Comme pour C, autant que je sache, il n'y a pas d' bool
chez C. (avant 1999) Alors bool
de int
de conversion est pertinente en C++. En C, 4<5
évalue int
de la valeur, dans ce cas, la valeur est 1
, 4>5
permettrait d'évaluer à l' 0
.
EDIT: Jens dans le commentaire dit, C99 a _Bool
type. bool
est une macro définie en stdbool.h
fichier d'en-tête. true
et false
sont également macro définie en stdbool.h
.
§7.16 de C99 dit,
La macro
bool
étend à _Bool.[..]
true
qui s'étend de la constante entière1
,false
qui s'étend de la constante entière0
,[..]
Vous tagged votre question [C] et [C++] dans le même temps. Les résultats seront cohérentes entre les langues, mais la structure de l', la réponse est différente pour chacune de ces langues.
En langage C, et vos exemples n'a pas de rapport à bool
que ce soit (qui s'applique à C99). En langage C, les opérateurs relationnels ne produisent pas d' bool
des résultats. Les deux 4 > 5
et 4 < 5
sont des expressions qui produisent des résultats de type int
avec des valeurs 0
ou 1
. Donc, il n'y a pas de "bool int conversion" de toute sorte de prendre place dans votre exemple en C.
En C++ opérateurs relationnels ne sont en effet produire de l' bool
des résultats. bool
des valeurs sont convertibles int
type true
de la conversion à l' 1
et false
de la conversion à l' 0
. Cela est garanti par la langue.
P. S. C aussi la langue possède un type booléen _Bool
(macro-alias bool
), et son intégrale des règles de conversion sont essentiellement les mêmes qu'en C++. Mais néanmoins, ce n'est pas pertinente pour votre exemples précis dans C. une Fois de plus, les opérateurs relationnels dans C toujours produire de l' int
(pas bool
) résultats, indépendamment de la version de la spécification du langage.
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.