true == 1

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

Le problème exposé dans ce sujet a été résolu.

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

+0 -0

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.

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.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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