3 回答

TA貢獻1862條經(jīng)驗 獲得超6個贊
cin是istream代表標準輸入流的類的對象。它對應于cstdio流stdin。>>流的運算符重載返回對同一流的引用??梢酝ㄟ^轉(zhuǎn)換運算符在布爾條件下將流本身評估為true或false。
cin提供格式化的流提取。手術(shù) cin >> x;
如果輸入非數(shù)字值,則“ x”為整數(shù)的位置將失敗。所以:
if(cin>>x)
false如果您輸入字母而不是數(shù)字,將返回。
有關使用C ++ I / O的技巧的本網(wǎng)站也將為您提供幫助。

TA貢獻1789條經(jīng)驗 獲得超10個贊
注意:事實回答四年后才更新,以解決C ++ 98/03和C ++ 11(及更高版本)。
std::cin
是的實例std::istream
。該類提供了兩個與此問題有關的重載。
operator >>
如果可能,將數(shù)據(jù)從流中讀取到目標變量中。如果流的立即內(nèi)容不能轉(zhuǎn)換為目標變量的類型,則將該流標記為無效,并且保持目標變量不變。無論操作成功與否,返回值都是對流的引用。任一
operator void*()
(預C ++ 11),其將流參照void*
指針,或explicit operator bool()
(C ++ 11),其將流參考一個布爾值。true
如果流有效,此轉(zhuǎn)換的結(jié)果是非空指針(C ++ 11之前)或(C ++ 11),但空指針(C ++ 11之前)或false
(C ++ 11) )(如果流無效)。
一條if
語句需要布爾值,整數(shù)或指針作為要測試的數(shù)量。的結(jié)果std::cin >> x
是對的引用istream
,而上述都不是。但是,該類istream
確實具有那些轉(zhuǎn)換運算符,可用于將istream
引用轉(zhuǎn)換為if
語句中可用的內(nèi)容。它是該語言用于if
測試的特定于版本的轉(zhuǎn)換運算符。由于讀取if
失敗會將流標記為無效,因此如果讀取無效,則測試將失敗。
operator void*
在C ++ 11之前使用更復雜的轉(zhuǎn)換成員的原因是,直到C ++ 11才將現(xiàn)有explicit
關鍵字擴展到適用于轉(zhuǎn)換運算符和構(gòu)造函數(shù)。非顯式operator bool()
的編程會給程序員帶來太多機會,使他們無法自拔。也有問題operator void*()
?!鞍踩紶柍烧Z”本來可以解決,但只需擴展即可explicit
完全實現(xiàn)安全布爾成語所要完成的事情,而不必使用很多SFINAE魔術(shù)。

TA貢獻1815條經(jīng)驗 獲得超6個贊
cin在std名稱空間中是變量。
operator>>返回對的引用cin,因此您可以編寫:cin >> a >> b,而不是cin >> a; cin >> b;
- 3 回答
- 0 關注
- 941 瀏覽
添加回答
舉報