Question

En lisant "5ème édition de C ++ Primer Plus", j'ai vu ce code:

    cin.get(ch);
    ++ch;
    cout << ch;

Ainsi, cela amènera à afficher le caractère suivant après ch. Mais si je le faisais de cette façon:

    cin.get(ch);
    cout << ch+1;

Maintenant, cout pensera que ch est un int (essayez de transtypage). Alors, pourquoi le cout le fait? Et pourquoi, si j’ajoute 1 à un personnage, il produira un nombre ?. Et pourquoi il y a une différence entre: ch ++ et ch + 1.

Était-ce utile?

La solution

La raison en est que le type du littéral 1 est int. Lorsque vous ajoutez un int et un caractère, vous obtenez un int, mais lorsque vous incrémentez un caractère, il reste un caractère.

Essayez ceci:

#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;
}

Autres conseils

Remarque: il s'agit de la réponse à la question d'origine, qui a été modifiée depuis.

  

Maintenant, cout pensera que ch est un int (essayez   typecasting).

Non, ça ne va pas. Il n'est pas possible de changer le type d'une variable en C ++.

++ch;

incrémente tout ce qui est dans le ch.

ch + 1;

prend la valeur (contenu) de ch, ajoute 1 et supprime le résultat. Tout ce qui est dans ch est inchangé.

L'instruction ++ ch; incrémente ch alors que ch + 1; ne le fait pas.

De plus, rappelez-vous que '++ ch' fera l'incrément avant d'exécuter l'instruction dans laquelle il se trouve, c'est pourquoi il reste un caractère.

int i = 0;
cout << ++i << endl;
cout << i++ << endl;
// both will print out 1.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top