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.

¿Fue útil?

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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top