C# short
Arithmétique : une subtilité
Ajout de deux short
variables directement en C#, comme ceci :
<code class="language-csharp">short a, b; a = 10; b = 10; a = a + b; // Error: Cannot implicitly convert type 'int' to 'short'</code>
produit une erreur du compilateur. La raison ? La somme de deux valeurs short
est implicitement promue en int
. L'attribution d'un int
à une variable short
nécessite une conversion explicite, qui manque dans ce code.
Étonnamment, l'opérateur d'affectation composé =
fonctionne sans erreur :
<code class="language-csharp">a += b; // Works correctly</code>
Pourquoi la différence ?
Le =
Secret de l'opérateur
L'opérateur =
n'est pas simplement du sucre syntaxique ; c'est une fonctionnalité linguistique soigneusement conçue. Bien que fonctionnellement équivalent à a = a b
, le compilateur le traite différemment. La spécification C# stipule que les opérateurs d'affectation composée effectuent une conversion implicite du résultat de l'opération vers le type de l'opérande de gauche.
Essentiellement, a = b
est implicitement traité comme a = (short)(a b)
. Le compilateur insère automatiquement le cast nécessaire dans short
, évitant ainsi l'erreur d'incompatibilité de type.
Ce casting implicite est un aspect crucial de la conception de C#. Sans cela, de nombreuses opérations arithmétiques courantes impliquant des types entiers plus petits nécessiteraient une conversion explicite, ajoutant une complexité significative au code.
En bref (jeu de mots intentionnel)
Le problème principal est la promotion de type implicite de short short
à int
. L'opérateur =
contourne intelligemment ce problème en incorporant une conversion implicite, ce qui en fait un moyen pratique et efficace d'effectuer des opérations arithmétiques sur des types entiers plus petits sans conversions de type explicites.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!