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.

È stato utile?

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.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top