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.

Foi útil?

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.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top