2017-07-01 45 views
1

我想了解更多關於流狀態的信息,並且閱讀heregood()如果流最近的I/O操作成功完成,則返回true。我曾嘗試以下,如果我理解正確的話,違背了上述說法C++:流輸出操作成功,但狀態不好

#include <iostream> 
#include <sstream> 


int main() { 

    std::stringstream ss; 
    int x; 

    ss << "42"; 
    ss >> x; 

    std::cout << x << std::endl; // prints 42 as expected 
    std::cout << ss.good() << std::endl; // prints 0, expected 1 

    return 0; 
} 

有人能解釋,爲什麼流的狀態並不好,即使最後(輸出)操作成功?謝謝

+2

流已經意識到它到達文件結束,所以它不再是「好」。 –

+0

在'>>'的數字超載期間遇到蒸汽末端,請參閱http://en.cppreference.com/w/cpp/io/ios_base/iostate – pat

+0

謝謝大家。我的印象是eofbit只能在下一個字符提取時設置(這是從文件讀取時發生的情況)。 – linuxfever

回答

1

爲什麼在文件流的下一次提取之前沒有設置EOF的原因不是因爲文件/字符串流之間的行爲有任何差異,而是因爲許多文本編輯器在一個文件結尾處偷偷插入換行符文件。嘗試創建一個文本文件的內容:

a 
b 

然後用一些檢查像od -c,你可能會看到:

0000000 a \n b \n 
0000004 

通知B之後偷偷摸摸換行。如果在字符串流的末尾插入換行符,則應該遵守相同的行爲。

+0

謝謝,這是非常有道理的 – linuxfever

相關問題