2009-04-07 57 views
5

我有這樣的代碼,爲什麼stringstreams rdbuf()和str()給我不同的輸出?

int main() 
{ 
    std::string st; 
    std::stringstream ss; 
    ss<<"hej hej med dig"<<std::endl; 

    std::getline(ss,st,' '); 
    std::cout <<"ss.rdbuf()->str() : " << ss.rdbuf()->str(); 
    std::cout <<"ss.rdbuf() : " << ss.rdbuf(); 
    return 0; 
} 

給我這個輸出

ss.rdbuf() - > STR():HEJ HEJ MED挖

ss.rdbuf():HEJ med dig

但是爲什麼呢?那是因爲運算符<的ostreams定義,str()給了我不同的輸出。在我看來,即使使用getline,輸出也應該是相同的。

回答

6
ss.rdbuf()->str(); 

返回所有緩衝區內容的複製。

做什麼std::cout << ss.rdbuf();

basic_ostream<charT,traits>& operator<<(basic_streambuf<charT,traits>* sb); 

查看描述它從緩衝區中讀取字符爲單位,並把它們寫到ostream的,寫作/異常發生,直到EOF /失敗。

您已經從buff中讀取了一個單詞。現在它讀取休息部分。

3

爲了引用C++流I/O上的聖經,Langer and Kreft,在流緩衝區(即由rdbuf()返回的東西)上調用str()「的行爲非常違反直覺」(我的第72頁)。對於整個故事,你將不得不閱讀這本書。

如果你沒有在這裏得到滿意的答覆,請嘗試新聞組:

http://groups.google.com/group/comp.lang.c++.moderated

+0

哦。我從來沒有對這本書的頭!聽起來像是一本好書,因爲我覺得我有點像C++流的複雜性。 – mslot 2009-04-07 22:40:14

+0

這本好書 - 如果你對溪流感興趣。坦率地說,很少有C++程序員(包括我在內)。 – 2009-04-07 22:43:07

相關問題