int i=1,2,3;
int i=(1,2,3);
int i; i=1,2,3;
Quelle est la différence entre ces déclarations? Je ne peux pas trouver de raison particulière pour cela.
Statement 1 Result : Comstack error.
L’opérateur ‘=’ a une priorité supérieure à l’opérateur ‘,’. la virgule agit ici comme un séparateur. le compilateur crée une variable entière ‘i’ et l’initialise avec ‘1’. Le compilateur ne parvient pas à créer la variable entière ‘2’, car ‘2’ n’est pas un identifiant valide.
Statement 2 Result: i=3
L’opérateur ‘()’ a une priorité supérieure à celle de ‘=’. Donc, premièrement, l’opérateur de support est évalué. L’opérateur ‘()’ est actionné de gauche à droite. mais c’est toujours le résultat du dernier qui est assigné.
Statement 3: Result: i=1
L’opérateur ‘=’ a une priorité supérieure à l’opérateur ‘,’. donc ‘i’ est initialisé par ‘1’. ‘2’ et ‘3’ ne sont que des expressions constantes. donc pas d’effet.
C’est l’opérateur de virgule
i = a, b, c; // stores a into i ... a=5, b=2, c=3, i=5 i = (a, b, c); // stores c into i ... a=5, b=2, c=3, i=3
le comportement différent entre les première et deuxième lignes est dû au fait que l’opérateur de virgule a une priorité inférieure à celle de l’affectation.