Domanda
Mentre leggevo " C ++ Primer Plus 5a edizione " ;, ho visto questo pezzo di codice:
cin.get(ch);
++ch;
cout << ch;
Quindi, questo porterà a visualizzare il seguente carattere dopo ch. Ma se lo facessi in questo modo:
cin.get(ch);
cout << ch+1;
Ora, cout penserà che ch sia un int (prova a scrivere a macchina). Quindi, perché Cout lo fa? E perché se aggiungessi 1 a un carattere produrrà un numero ?. E perché c'è una differenza tra: ch ++ e ch + 1.
Soluzione
Il motivo per cui ciò si verifica è il tipo del 1
letterale è int. Quando aggiungi un int e un carattere ottieni un int, ma quando aumenti un carattere, questo rimane un carattere.
Prova questo:
#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;
}
Altri suggerimenti
Nota: questa è la risposta alla domanda originale, che è stata successivamente modificata.
Ora, cout penserà che ch sia un int (provare typecasting).
No, non lo farà. Non è possibile cambiare il tipo di una variabile in C ++.
++ch;
incrementa tutto ciò che è in ch.
ch + 1;
prende il valore (contenuto) di ch, aggiunge 1 ad esso e scarta il risultato. Qualunque cosa sia in ch rimane invariata.
L'istruzione ++ ch;
incrementa ch
mentre ch + 1;
no.
Inoltre, ricorda che '++ i' farà l'incremento prima di eseguire effettivamente l'istruzione in cui si trova, quindi è per questo che rimane un carattere.
int i = 0;
cout << ++i << endl;
cout << i++ << endl;
// both will print out 1.