2010-11-14 57 views
3

通過加速讀取C++,他們舉了一個我不明白的例子。這是一個while循環(cin >> x)。在腳本中的這一點上,x已被聲明爲double。我明白,只要x成功接收輸入,循環就會執行,但是>>返回一個布爾值?我想我只需要一點幫助,瞭解它是什麼>> < < do ....另外,雖然我們在這個問題上,iostream,ios和iomanip之間的區別是什麼輸入操作數返回布爾值在c + +?

+1

你應該把它分成兩個問題。問題標題中描述的第一部分是一個問題,但'我們談論這個問題'之後的所有事情都是一個不同的問題,因此應該是一個不同的問題。 – SingleNegationElimination 2010-11-14 07:02:40

回答

8

實際上,他們回報自己,即,

std::cin >> foo 

是恰好返回std::cin表達式(具有副作用)。它也發生iostream s可以轉換爲bool,如果他們準備好接收輸入,或者有輸出提供,他們是真的,如果他們關閉或在其各自的文件的末尾,它們是假的。

+1

更確切地說,它們被轉換爲'void *',然後轉換爲'bool'。即使有*輸入可用,流也可能評估爲「假」。例如,如果'foo'是一個'int',並且下一個要提取的字符不是數字,那麼該流將處於'fail'狀態。調用'清除'重置。 – 2010-11-14 07:21:10