2009-05-07 138 views

回答

10

它會告訴你流是否當前有效。這是所有流都可以做到的。例如,如果文件未正確打開,則文件流可能無效。

作爲邊注,該功能(測試流爲bool)通過在C++ 11和後來和通過重載在版本void*轉換運算符之前C++ 超載explicit operator bool實現。

這裏是一個包含some examples of why a stream might fail的鏈接。這不是特定於字符串流,但它適用於它們。

編輯:更改爲boolvoid*後,馬丁約克指出我的錯誤。

+4

實際上,這是通過重載void *轉換操作符來實現的。如果使用布爾型轉換運算符,則可以在算術上下文中使用該流,編譯器將轉換爲bool並使用值0/1。另一方面void *不能在算術上下文中使用,但可以在bool上下文中使用,因爲NULL指針的計算結果爲false。但在這種情況下,運營商!用於顯式返回一個布爾值。 – 2009-05-07 16:26:21

+0

好點。這就是我從記憶中獲得的東西。 ;) – Naaff 2009-05-07 16:54:59

+0

這意味着什麼專門爲ostringstream?內存不足,也許? – 2009-05-07 16:56:34

1

表達式是有效的,並且評估流的狀態。這個功能是比較常用的輸入流:

istringstream is; 
is.str("foo"); 
int x; 
is >> x; 

if (! is) { 
    cerr << "Conversion failed"; 
} 

我不知道如何任何的標準流功能可能會導致ostringstream走壞,但你當然可以自己寫一個。