2015-11-12 5 views
6

In einem Beispiel gegeben in C++ Primer,Wie funktioniert while (std :: cin >> value)?

#include <iostream> 
using namespace std; 

int main() { 
    int sum = 0, value = 0; 
    while (std::cin >> value) {  
     sum += value; // equivalent to sum = sum + value 
    }  
    std::cout << "Sum is: " << sum << std::endl;  
    return 0; 

} 

Wie funktioniert (std :: cin >> Wert) return true? Und was ist ein "Ende der Datei"? Es scheint, dass ich diesen Begriff verstehen muss, um meine primäre Frage zu verstehen.

Danke!

+0

Ende der Datei? es bedeutet ... Ende der Datei. Du hast das Ende erreicht. der terminus, der though-salt-not-pass-punkt, hier gibt es nichts zu sehen. –

+0

@MarcB, lustig, wie es mehr dazu gibt :) gibt es zwei verschiedene Dinge, die für das Ende der Datei in Windows-Welt stehen (zumindest gab es vor 15 Jahren) – SergeyA

+0

Die Antworten auf die ähnliche Frage, nur dann mit 'cout', sollte auch helfen zu erklären: [Do While-Schleife mit einer Cout-Anweisung] (http://Stackoverflow.com/q/33546984/2718186) – MicroVirus

Antwort

8

Die overloaded operator>> function gibt einen Verweis auf den Stream selbst zurück, und der Stream hat an overloaded operator, die es in einer booleschen Bedingung verwendet, um zu sehen, ob die letzte Operation in Ordnung ging oder nicht. Ein Teil des "OK oder nicht" schließt das erreichte Dateiende oder andere Fehler ein.

+0

Während 100% richtig, nicht sicher, ob OP weiß, was" überladene Operator-Funktion " meint. – SergeyA

+0

Es tut mir leid. Ich weiß nicht, was 'überladene Operatorfunktion' bedeutet. – Superex

+0

@Superex Stream-Klassen haben keine "inate" -Fähigkeit, die Shift-Operatoren '' '' und '' '' zu verwenden, stattdessen * überladen * diese Operator mit ihren eigenen Funktionen. Wenn Sie nichts über Überladen wissen (ein Konzept, das in C++ sehr wichtig ist), dann schlage ich vor, dass Sie ein Anfängerbuch oder eine Einführung aus [The Definitive C++ Book Guide and List] (http://stackoverflow.com/questions/ 388242/the-definitive-c-Buchführer-und-liste). –

-5

Wenn Sie ein Anfänger brauchen Sie nicht

std ::


jedes Mal zu schreiben. Wenn Sie Folgendes geschrieben haben:

using namespace std;


würde es den Trick. Ich hoffe, du hast es verstanden. :)

+2

Diese Antwort steht in keinem Zusammenhang mit der vorliegenden Frage. –

+0

Dies wäre keine Antwort, sondern ein Kommentar zu der ursprünglichen Frage –

0

C++ übersetzt diese Linie

while (std::cin >> value) 

um so etwas wie

inline bool f(int v) { 
    auto& i = std::cin >> v; 
    return i.operator bool(); 
} 

while(f(v)) { 

Warum übersetzt sie in bool? Da while einen booleschen Ausdruck erwartet, sucht der Compiler also nach dem booleschen Konvertierungsoperator der Rückgabe von std::cin >> v.

Was ist ein Bool-Konvertierungsoperator? Der Boolesche Konvertierungsoperator übersetzt das Objekt in bool. Wenn ein Teil des Codes erwartet, dass ein Typ als boolesch funktioniert (wie zum Beispiel Casting), dann wird dieser Operator verwendet.

Was ist ein Operator? Ist eine Funktion oder Methode, die das Verhalten einiger Operationg Ausdrücke (+, -, Casting, ->, etc.) überschreiben

Verwandte Themen