Je sais que le compilateur ne implicite type de conversion pour les littéraux entiers. Par exemple:
byte b = 2; // implicit type conversion, same as byte b = (byte)2;
Le compilateur me donne une erreur si la plage de débordement:
byte b = 150; // error, it says cannot convert from int to byte
Le compilateur donne le même message d'erreur lorsque la variable est passée d'une expression:
byte a = 3;
byte b = 5;
byte c = 2 + 7; // compiles fine
byte d = 1 + b; // error, it says cannot convert from int to byte
byte e = a + b; // error, it says cannot convert from int to byte
Je suis venu à la conclusion que le résultat d'une expression qui fait intervenir des variables ne peut être garantie. La valeur qui en résulte peut être à l'intérieur ou à l'extérieur de la plage d'octets, de sorte compilateur déclenche une erreur.
Ce qui m'intrigue, c'est que le compilateur ne génère pas une erreur quand je l'ai mis comme ceci:
byte a = 127;
byte b = 5;
byte z = (a+=b); // no error, why ?
Pourquoi n'est-il pas me donner une erreur?