2015-11-12 3 views
6

В примере, приведенном в C++ Primer,Как работает (std :: cin >> значение)?

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

} 

Как (станд :: CIN >> значение) возвращает истину? А что такое «конец файла»? Кажется, я должен понять этот термин, чтобы понять мой основной вопрос.

Спасибо!

+0

конец файла? это означает ... конец файла. вы дошли до конца. на конечной точке, хотя и не пройденной точке, здесь ничего не видно. –

+0

@MarcB, смешно, как есть еще к этому :) есть две разные вещи, которые стоят за конец файла в мире Windows (по крайней мере, было 15 лет назад) – SergeyA

+0

Ответы на аналогичный вопрос, только после этого 'cout', также должен помочь объяснить: [Делать while цикл с инструкцией cout] (http://stackoverflow.com/q/33546984/2718186) – MicroVirus

ответ

8

overloaded operator>> function возвращает ссылку на сам поток, а поток имеет an overloaded operator, что позволяет использовать его в логическом состоянии, чтобы увидеть, прошла ли последняя операция в порядке или нет. Часть «хорошо или нет» включает конец достигнутого файла или другие ошибки.

+0

Хотя 100% правильно, не уверен, что OP знает, что 'перегруженная функция оператора' означает. – SergeyA

+0

Прошу прощения. Я не знаю, что означает «перегруженная функция оператора». – Superex

+0

Классы @Superex Stream не имеют «inate» способности использовать операторы сдвига '>>' и '<<', вместо этого они * перегружают * тот оператор своими собственными функциями. Если вы не знаете о перегрузке (концепция, которая очень важна на C++), я предлагаю вам забрать книгу или учебник для начинающих из [The Definitive C++ Book Guide and List] (http://stackoverflow.com/questions/ 388242/заместитель окончательного-с-книга-гид-и-лист). –

-5

Если вы новичок, вы не должны писать

зЬй ::


каждый раз. Если вы написали:

using namespace std;


это будет делать трюк. Надеюсь, вы поняли. :)

+2

Этот ответ не связан с вопросом. –

+0

Это был бы не ответ, а комментарий к первому вопросу –

0

C++ преобразует эту строку

while (std::cin >> value) 

к чему-то вроде

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

while(f(v)) { 

Почему это приводит к BOOL? Потому что в то время как ожидает булевское выражение, поэтому компилятор ищет оператор логического преобразования возврата std::cin >> v.

Что такое оператор преобразования bool? Оператор boolean conversion переводит объект в bool. Если какая-то часть кода ожидает, что какой-то тип будет работать как boolean (например, casting), то этот оператор будет использоваться.

Что такое оператор? Является ли функция или метод, которые переопределяют поведение некоторых выражений operationg (+, -, casting, -> и т. Д.)

Смежные вопросы