Je viens de croiser un morceau de code qui compile non seulement, mais donne le résultat attendu (où x est une valeur entière):Vous pensez donc connaître la priorité des opérateurs en C++?
int y = (int)(0.5 * x * x + + + 0.6 * x + 1.2);
Il m'a fallu un certain temps pour comprendre ce qui se passe et je dois dire c'était un problème d'opérateur intéressant. Sans compiler le programme, quels sont les résultats des opérations suivantes et pourquoi?
int a = 1;
int b = 2;
int z = a + + + b;
int z1 = a + - + b;
int z2 = a + - - b;
int z3 = a - - + b;
int z4 = a - - - b;
int z5 = a +- b;
J'ai encore une question, cependant: la norme donne-t-elle de tels résultats ou est-elle spécifique au compilateur?
Explication: Parce que + et - les opérateurs ont des espaces entre eux, la séquence « + + + » n'est pas compilé comme « ++ + », mais que les opérateurs unaires sur le membre droit. Alors
int y = (int)(0.5 * x * x + + + 0.6 * x + 1.2);
donne en fait:
int y = (int)(0.5 * x * x + 0.6 * x + 1.2);
qui était le résultat attendu.
Ainsi,
z = a + + + b = a + + (+b) = a + (+b) = a + b = 3;
z1 = a + - + b = a + - (+b) = a + (-b) = a - b = -1;
z2 = a + - - b = a + - (-b) = a + (+b) = a + b = 3;
z3 = a - - + b = a - - (+b) = a - (-b) = a + b = 3;
z4 = a - - - b = a - - (-b) = a - (+b) = a - b = -1;
z5 = a +- b = a + (-b) = a - b = -1;
Donne le "résultat attendu"? Est-ce qu'il imprime une information à l'écran en disant "Qui compile, mais je ne sais pas pourquoi vous le voudriez"? C'est ce à quoi je m'attendrais. –
Pas vraiment intéressé par les quiz de codage artificiels, merci. –
Si le résultat était vraiment attendu, vous ne poseriez pas cette question. –