2012-05-11 25 views
0

是什麼以下將一個stringstream附加到另一個。什麼是最安全的?

stringstream a; 
stringstream b; 
a << "hi"; 
b << "there"; 

a << " " << b.rdbuf();a << " " << b.str();a << " " << b.str().c_str();


我一直在使用rdbuf()之間的差異。我也注意到,在C++參考說爲stringstream::rdbuf

注意,對於任何成功構建istringstream對象這 指針永遠不能爲null,即使緩衝區字符串是空的。

我認爲這意味着rdbuf()不會返回NULL?我無法傳遞NULL。我有這樣的錯誤char *array = NULL; a << array;。如果stringstream b是空的,那麼在做a << b.rdbuf() << "some text"時是否定義了行爲?在這種情況下,rdbuf返回的第一個字符是不是具有eof特徵,因此b中什麼都不會被追加?

感謝

+3

* Aside *:cplusplus.com不是「** ** ** C++參考」,它是「** a ** C++參考」。爲了正確,許多人更喜歡http://cppreference.com。當然,**參考是2003或2011版本中的ISO C++標準。 –

+0

顯而易見的'a <<「」<< b;'? – moooeeeep

+0

@moooeeeep你不能以這種方式追加字符串流。 – loop

回答

5

的區別是什麼?

它們在效果上都是等效的,但它們在性能或效率上可能不同。

我認爲這意味着rdbuf()不會返回NULL?

你把它正確。

如果stringstream b是空的,那麼定義的行爲是?

是的。

在這種情況下,rdbuf返回的第一個字符是不是具有eof特徵?

號第一次調用.sgetc()(或.snextc())將不會返回與EOF性狀的性格,它會返回EOF(這不是字符)。所以,你的例子將相當於a << "" << "some text"

相關問題