C++中cin的返回值問題

cin的返回值

今天在用STL時用到while(cin>>s1>>a>>s2>>b)這樣的語句,本來所有的輸入都是“string+int+string+int”格式的,但是結束標志卻是“quit”,於是很好奇cin的輸入到底是返回什麼。

首先想到,cin是一個對象,那麼到底是返回什麼影響瞭while,查瞭很多博客才發現是操作符“>>”在起作用,這個操作符接收一個istream對象作為其做操作數,接收一個對象作為其右操作數。

”>>”操作符返回其左操作數作為結果,這樣也就可以解釋為什麼上面可以將個幾輸入操作合並瞭。

原因在於得到輸入後返回一個cin,接著可以繼續操作讀取瞭,而且在輸入不符合類型和EOF時停止。

輸入(cin)緩沖是行緩沖。

當從鍵盤上輸入一串字符並按回車後,這些字符會首先被送到輸入緩沖區中存儲。

每當按下回車鍵後,cin 就會檢測輸入緩沖區中是否有瞭可讀的數據。

cin流輸入的返回值問題

感覺今天發現一個比較好的問題

while(cin>>n)

這個語句肯定經常看到把

但是

為什麼可以用while來判斷呢

難道cin>>n的返回值是bool 類型?

這時候,看源碼 的 重要性就體現出來瞭

在ios裡面有

    operator void *() const {
        if(state&(badbit|failbit) )
            return 0;
        return (void* )this;
    }

這樣一段代碼

再來看這樣一段文字

所以說 invalid state 時 返回值為0,否則是(void *)首地址

這樣就可以用while來判斷瞭

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: