Pergunta
Durante a leitura de "C ++ Primer Plus 5ª edição", eu vi este pedaço de código:
cin.get(ch);
++ch;
cout << ch;
Então, isso vai levar a exibir a seguinte caractere após ch. Mas, Se eu fiz isso dessa forma:
cin.get(ch);
cout << ch+1;
Agora, cout vai pensar ch é um int (typecasting tentativa). Então, por que cout faz isso? E por que se eu adicionei 1 para um char que irá produzir um número ?. E por isso que há uma diferença entre: ch ++, e ch + 1.
Solução
A razão isso ocorre é o tipo de 1
literal é int. Quando você adiciona um int e um char você recebe um int, mas quando você incrementa um char, continua a ser um char.
Tente isto:
#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;
}
Outras dicas
Por favor, note -. Este é o answe à pergunta inicial, que desde então tem sido editado
Agora, cout vai pensar ch é um int (try typecasting).
Não, não vai. Não é possível alterar o tipo de uma variável em C ++.
++ch;
incrementos de tudo o que está no cap.
ch + 1;
tem o valor (conteúdo) de ch, adiciona 1 a ela e descarta o resultado. O que está em ch é inalterada.
O incrementos declaração ++ch;
ch
enquanto ch + 1;
não.
Além disso, lembre-se que '++ ch' fará o incremento antes de realmente executar a instrução que se encontra, de modo que é por isso que continua a ser um char.
int i = 0;
cout << ++i << endl;
cout << i++ << endl;
// both will print out 1.