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。
推薦閱讀:
- C++中cin>>n的返回值
- C++:IO類,文件輸入輸出,string流練習題
- C++類和對象實戰之Date類的實現方法
- C++string底層框架模擬實現代碼
- C++11運算符重載和向量類重載實例詳解(<<,>>,+,-,*等)