Pregunta
Al leer " C ++ Primer Plus 5th edition " ;, vi este fragmento de código:
cin.get(ch);
++ch;
cout << ch;
Entonces, esto llevará a mostrar el siguiente carácter después del cap. Pero, si lo hiciera de esa manera:
cin.get(ch);
cout << ch+1;
Ahora, cout pensará que ch es un int (intente la conversión de tipos). Entonces, ¿por qué Cout lo hace? ¿Y por qué si agregué 1 a un carácter producirá un número? Y por qué hay una diferencia entre: ch ++ y ch + 1.
Solución
La razón por la que esto ocurre es que el tipo del 1
literal es int. Cuando agrega un int y un char, obtiene un int, pero cuando incrementa un char, sigue siendo un char.
Prueba esto:
#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;
}
Otros consejos
Tenga en cuenta: esta es la respuesta a la pregunta original, que desde entonces se ha editado.
Ahora, cout pensará que ch es un int (intente tipografía).
No, no lo hará. No es posible cambiar el tipo de una variable en C ++.
++ch;
incrementa lo que está en ch.
ch + 1;
toma el valor (contenido) de ch, le agrega 1 y descarta el resultado. Lo que está en ch no cambia.
La instrucción ++ ch;
incrementa ch
mientras que ch + 1;
no lo hace.
Además, recuerde que '++ i' hará el incremento antes de ejecutar realmente la declaración en la que se encuentra, por lo que sigue siendo un carácter.
int i = 0;
cout << ++i << endl;
cout << i++ << endl;
// both will print out 1.