true == 1

Natif ou surcharge d'opérateur dans la bibliothèque standard ?

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour tout le monde.

Ma question est simple mais je ne vois pas comment vérifier la réponse, tout est dans les titres mais je la redonne :
Dans l’expression "true == 1", qui compile, est-ce que c’est natif (cast implicite, par exemple) ou y a-t-il une surcharge d’opérateur définie dans la bibliothèque standard ?
J’ai essayé avec un code de test qui affiche le résultat à l’écran, donc avec un #include <iostream>, puis j’ai essayé avec le code le plus simple possible (sans include) :

1
2
3
4
int main() {
    true == 1;
    return 0;
}

Bien sûr, j’ai eu un warning "statement has no effect", mais ça a bien compilé. J’en déduis que c’est "natif", mais est-ce vraiment "natif" ou est-ce un cast implicite ?

Je vous rassure, oui je m’ennuie xD

Édité par loukiluk

+0 -0

Cette réponse a aidé l’auteur du sujet

Comme on ne peut pas surcharger les opérateurs sur 2 types natives, oui, c’est un comportement de base et non pas quelque chose dans la bibliothèque standard. Mais le compilateur va convertir le booléen en int d’après des règles de promotion qui se simplifient plus ou moins en: si 2 types numériques sont différents, la promotion se fait sur le type avec le plus grand rang (short < int < unsigned int < long < unsigned long). Si le rang des 2 valeurs est inférieur à int, alors les types deviennent des int.

+1 -0
Auteur du sujet

Ah oui tiens, j’avais oublié que c’était pas possible sur les types natifs, mais ça me paraît évident maintenant que tu me le rappelles >_<

Ok, merci pour ta réponse un peu plus complète que ce que j’espérais ^^

Édité par loukiluk

+0 -0

Je ne comprend pas le problème. Déjà, c’est quoi ce true ?
Ensuite, ce code génère une erreur "invalid syntax" sur main().

Il se faut s’entraider, c’est la loi de la nature. (Jean de La Fontaine, l’âne et le chien)

+0 -4

Je ne comprend pas le problème. Déjà, c’est quoi ce true ?

etherpin

true (comme false) c’est un booléen.

Je te cite Wikipedia :

En informatique, un booléen est un type de variable à deux états (généralement notée vrai et faux), destiné à représenter les valeurs de vérité de la logique et l’algèbre Booléenne.

Edit : Et pour le "invalid syntax", c’est peut être parce que tu code en C au lieu de C++ (à vérifier). En C, ce type de variable n’existe pas.

Édité par FougereBle

Ku Wenja warhata? U miha Wenja warha!

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte