Mon programme cpp ne demande pas d’entrée.

Je suis tombé sur cette question et je ne pouvais pas comprendre pourquoi il ne demande pas d’apport. la sortie du code est cin0. S’il vous plaît expliquer pourquoi.

#include using namespace std; int main () { int cin; cin >> cin; cout << "cin" << cin; return 0; } 

Regardons cela ligne par ligne.

 int cin; 

Cette ligne déclare une variable locale nommée cin . À partir de maintenant, chaque fois que vous écrivez cin , le compilateur pense toujours que vous voulez parler de cette variable locale , et non de l’object de stream d’entrée std::cin .

 cin >> cin; 

Cette ligne lit la variable locale et effectue le décalage de bits. Lorsque les deux côtés de l’opérateur >> sont des entiers, cela ne signifie plus une entrée; cela signifie peu de décalage maintenant.

Mais ce n’est pas le sujet.

Le fait est que la variable locale cin n’est pas initialisée et qu’elle est lue. Le comportement est indéfini. Un comportement non défini dans le programme peut rendre le comportement de l’ensemble du programme non défini.

Notez également que, si nous ignorons le problème du comportement indéfini, le résultat du décalage de bits n’est affecté à rien et est donc perdu.

 cout << "cin" << cin; 

La variable locale cin est à nouveau lue sans initialisation. Ceci est une autre ligne de comportement indéfini.

En raison du comportement indéfini, il n’est plus utile de dire pourquoi il cin0 . Mais on peut raisonnablement imaginer que la mémoire de la variable locale cin contient zéro.

Shadowing.

int cin;
cin >> cin;

Les deux cin de la deuxième ligne font référence à l’int, et non à la classe à laquelle vous êtes habitué. Vous calculez a>>a (c’est-à-dire à peu près équivalent à a / 2^a ), juste avec une variable appelée cin.

Choisissez un autre nom de variable.