Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
Quel est donc l'intérêt de spécifier default:return(false ) si la variable appartient au type bool, qui n'a en principe que deux valeurs, toutes deux utilisées dans l'instruction switch ? En d'autres termes, l'étiquette par défaut ne devrait jamais être exécutée du tout.
P.S. 1. En outre, si nous suivons votre approche, l'étiquette par défaut devient obligatoire au lieu d'être facultative.
2. les opérateurs de rupture n'ont aucun sens dans les deux cas.
L'opérateur switch convertit votre bool_var en un type entier.
Et le compilateur n'a pas besoin de savoir que cette variable a deux valeurs. Il ne s'agit pas d'analyser l'algorithme de façon logique.
Vous oubliez encore une chose : toute variable peut avoir une valeur invalide ou être non initialisée (avoir une valeur "poubelle")...
Je n'oublie pas. Ainsi, dans mon exemple, la variable a été initialisée. Malgré cela, le compilateur a généré une erreur.
L'exemple avecbool_var=-1est extrêmement incorrect. Voyez par vous-même :
L'instruction switch convertit votre bool_var en un type entier.
Et le compilateur n'a pas besoin de savoir que cette variable a deux valeurs. Il n'analyse pas l'algorithme de manière logique.
À propos, avec les booléens, il y a une variante chanceuse quand une variable non initialisée ou une variable avec la valeur -1, par exemple, sera transformée en vrai/faux.
Ce qui, bien sûr, ne se produira pas si vous déclarez explicitement la variable comme int.
Je n'oublie pas. C'est pourquoi la variable a été initialisée dans mon exemple. Malgré cela, le compilateur a généré une erreur.
L'exemple avecbool_var=-1est extrêmement incorrect. Convainquez-vous :
J'en suis déjà convaincu et c'est pourquoi je l'ai supprimé. Mais c'est une chance accidentelle (considérez-la comme une caractéristique de la langue).
Mais lorsqu'il traite une erreur éventuelle dans un bloc de commutation, le compilateur n'a pas à déterminer ce qui est saisi et comment, et le traite donc comme une erreur et non comme un avertissement.
Et le compilateur n'a pas besoin de savoir que cette variable a deux valeurs. Il ne fait pas une analyse logique de l'algorithme.
Vous dites donc que le compilateur ne prend pas en compte la liste des valeurs de l'énumération et leur nombre total ?
Mais lors du traitement d'une erreur éventuelle dans un bloc de commutation, le compilateur n'a pas besoin de comprendre ce qui est entré et comment, il le traite donc comme une erreur et non comme un avertissement.
1. bool est déjà un "type entier". Ou bien vous dites que le switch est une conversion vers un type d'entier supérieur.
2. vous voulez dire que le compilateur ne prend pas en compte la liste des valeurs de l'enum et leur nombre total ?
1. bool est un type entier dont la taille est d'un octet. La conversion est de type int, vous avez raison.
2. Vous avez raison ici aussi. Seul le cas n'est pas une énumération, mais juste une étiquette pour le branchement conditionnel.
1. bool est un type entier d'un octet. La conversion se fait en type int, vous avez raison.
Selon le manuel, bool est un type spécial autre que les entiers... J'ai donc supprimé ma déclaration incorrecte. Même si je ne vais pas discuter - je ne suis pas un expert.
Dima_S:
Vous voulez donc dire que le compilateur ne tient pas compte de la liste des valeurs de l'énumération et de leur nombre total ?
2. Vous l'avez écrit correctement ici aussi. Seul le cas n'est pas une énumération mais juste une étiquette pour une branche conditionnelle.
Je ne parlais pas des étiquettes de casse mais des énumérations (en considérant le type bool comme le plus petit). Voici un exemple avec la même erreur de compilation :
Je répète donc ma question concernant cet exemple : voulez-vous dire que le compilateur ne prend pas en compte la liste des valeurs de l'énumération Triple et leur nombre total ? J'ai toutes les valeurs de l'énumération utilisées dans l'opérateur de commutation.
La conclusion intermédiaire est la suivante : l'utilisation de l'étiquette par défaut devient obligatoire lors de l'utilisation de l'énumération+switch ?
Imaginons ceci (à propos, la valeur 3 ne fonctionne pas avec la déclaration explicite d'une valeur, mais -1 oui). Mais l'absence d'initialisation explicite de la variable montrera que la valeur est égale à celle qui a l'indice 0 (tout ceci est bien pensé).
Que doit retourner la fonction si l'option par défaut est exclue ?
La conclusion intermédiaire est la suivante : l'utilisation de l'étiquette par défaut devient obligatoire lors de l'utilisation de l'énumération+switch ?
oui, si quelque chose doit être retourné dans return().
ou au moins pour que le compilateur puisse être sûr que la fonction retournera quelque chose :