我偶然發現了這段代碼。如何將std :: ostringstream轉換爲bool?
std::ostringstream str;
/// (some usage)
assert(! str);
在bool
上下文中使用時,是什麼ostringstream
意味着什麼?
這可能是一個不正確的用法,發生在編譯和運行?
我偶然發現了這段代碼。如何將std :: ostringstream轉換爲bool?
std::ostringstream str;
/// (some usage)
assert(! str);
在bool
上下文中使用時,是什麼ostringstream
意味着什麼?
這可能是一個不正確的用法,發生在編譯和運行?
它會告訴你流是否當前有效。這是所有流都可以做到的。例如,如果文件未正確打開,則文件流可能無效。
作爲邊注,該功能(測試流爲bool)通過在C++ 11和後來和通過重載在版本void*
轉換運算符之前C++ 超載explicit operator bool
實現。
這裏是一個包含some examples of why a stream might fail的鏈接。這不是特定於字符串流,但它適用於它們。
編輯:更改爲bool
到void*
後,馬丁約克指出我的錯誤。
表達式是有效的,並且評估流的狀態。這個功能是比較常用的輸入流:
istringstream is;
is.str("foo");
int x;
is >> x;
if (! is) {
cerr << "Conversion failed";
}
我不知道如何任何的標準流功能可能會導致ostringstream走壞,但你當然可以自己寫一個。
實際上,這是通過重載void *轉換操作符來實現的。如果使用布爾型轉換運算符,則可以在算術上下文中使用該流,編譯器將轉換爲bool並使用值0/1。另一方面void *不能在算術上下文中使用,但可以在bool上下文中使用,因爲NULL指針的計算結果爲false。但在這種情況下,運營商!用於顯式返回一個布爾值。 – 2009-05-07 16:26:21
好點。這就是我從記憶中獲得的東西。 ;) – Naaff 2009-05-07 16:54:59
這意味着什麼專門爲ostringstream?內存不足,也許? – 2009-05-07 16:56:34