& # 8220; Ch ++ & # 8221; ou & # 8220; ch + 1 & # 8221; en C ++?
Question
En lisant "5ème édition de C ++ Primer Plus", j'ai vu ce code:
cin.get(ch);
++ch;
cout << ch;
Ainsi, cela amènera à afficher le caractère suivant après ch. Mais si je le faisais de cette façon:
cin.get(ch);
cout << ch+1;
Maintenant, cout pensera que ch est un int (essayez de transtypage). Alors, pourquoi le cout le fait? Et pourquoi, si j’ajoute 1 à un personnage, il produira un nombre ?. Et pourquoi il y a une différence entre: ch ++ et ch + 1.
La solution
La raison en est que le type du littéral 1
est int. Lorsque vous ajoutez un int et un caractère, vous obtenez un int, mais lorsque vous incrémentez un caractère, il reste un caractère.
Essayez ceci:
#include <iostream>
void print_type(char)
{
std::cout << "char\n";
}
void print_type(int)
{
std::cout << "int\n";
}
void print_type(long)
{
std::cout << "long\n";
}
int main()
{
char c = 1;
int i = 1;
long l = 1;
print_type(c); // prints "char"
print_type(i); // prints "int"
print_type(l); // prints "long"
print_type(c+i); // prints "int"
print_type(l+i); // prints "long"
print_type(c+l); // prints "long"
print_type(c++); // prints "char"
return 0;
}
Autres conseils
Remarque: il s'agit de la réponse à la question d'origine, qui a été modifiée depuis.
Maintenant, cout pensera que ch est un int (essayez typecasting).
Non, ça ne va pas. Il n'est pas possible de changer le type d'une variable en C ++.
++ch;
incrémente tout ce qui est dans le ch.
ch + 1;
prend la valeur (contenu) de ch, ajoute 1 et supprime le résultat. Tout ce qui est dans ch est inchangé.
L'instruction ++ ch;
incrémente ch
alors que ch + 1;
ne le fait pas.
De plus, rappelez-vous que '++ ch' fera l'incrément avant d'exécuter l'instruction dans laquelle il se trouve, c'est pourquoi il reste un caractère.
int i = 0;
cout << ++i << endl;
cout << i++ << endl;
// both will print out 1.