2016-03-20 4 views
-1
#include<iostream> 
using namespace std; 
int main() 
{ 
    int cin; 
    cin >> cin; 
    cout << "cin" << cin; 
    return 0; 
} 

Dies ist das Programm. Ich dachte, es sollte einen Fehler geben. Aber es kompilierte und gab Ausgabe als cin0. h. cin+junkvalueint cin. Arbeiten noch wie?

P.S. Ich verstehe, dass cin >> cin, ist ein Bit-Shift-Betrieb hier. Aber meine Frage ist warum können wir int cin hier erklären?

Antwort

3

Sie können einen beliebigen Variablennamen in einem anderen Bereich als eine vorhandene Variable deklarieren. cin ist kein Schlüsselwort oder ein reservierter Name, sondern nur ein offizieller Name des Eingabestreams. Wenn Sie in Ihrem Code using namespace std; nicht verwenden, können Sie std::cin >> cin; tun und einen ganzzahligen Wert von der Standardeingabe lesen. [Sollte hinzufügen, dass sogar mit using namespace std;, können Sie noch Namespacequalifikatoren verwenden, so würde std::cin >> cin; "mit" sowie "ohne" diese Aussage arbeiten - ich meinte eher, dass es eine schlechte Angewohnheit ist, im Allgemeinen zu verwenden, bevorzuge ich einfach zu tippen der Namespace, wo immer es gebraucht wird]

Offensichtlich ist es generell eine schlechte Idee, solche Dinge zu tun. Aber es ist gut definiert und "funktioniert", solange Sie wissen, was Sie tun und nicht beide zur gleichen Zeit brauchen.

+0

Also im Code, um die Benutzereingabe für Variable Cin zu bekommen, sollte ich was verwenden. :: cin >> cin, um die Eingabe zu erhalten. –

+0

Und ich verwende nie 'using namespace std;' in meinem Code. Das war in einem Quiz und ich war verwirrt, als ich sah, dass dieser Code funktionierte. –

+0

Es gibt mehrere Möglichkeiten, dies als "beabsichtigt" zu "arbeiten". Und ja, es ist klar definiert, 'cin' ist in keiner Weise" besonders ". –