2015-11-12 40 views
6

在C++入門給出的例子,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; 

} 

如何(給std :: cin >>值)返回true?什麼是「文件結束」?我似乎必須理解這個詞,才能理解我的主要問題。

謝謝!

+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 /對,最終-C-書指南和列表)。 –

-5

如果你不需要一個初學者寫

的std ::


每次。如果你寫了:

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? 因爲while期望一個布爾表達式,所以編譯器搜索返回std::cin >> v的布爾轉換運算符。

什麼是布爾轉換運算符? 布爾轉換運算符將對象轉換爲布爾值。如果代碼的某些部分期望某種類型將其作爲布爾值(如鑄造),則使用此運算符。

什麼是操作員? 是覆蓋某些操作表達式(+, - ,casting, - >等)的行爲的函數或方法

相關問題