stringstream.read()是否使用流?

cho*_*wey 3 c++ stringstream

我无法从文档中看出它是如何std::stringstream.read()工作的.它是否消耗流?

换一种说法:

std::stringstream ss;
char buffer[6];

ss << "Hello world!";
ss.read(buffer, 6);

std::cout << ss.str(); // Is this "Hello world!" or just "world!"
Run Code Online (Sandbox Code Playgroud)

Die*_*ühl 6

成员std::istream::read()使流返回的字符数增加.我想,这就是"消耗流"的意思.从中读取6个字符后ss,下一个字符将被读取w.

但是,字符串流的内部缓冲区仍然是整个字符串,即结果str()不受读取位置的影响:std::stringstream::str()返回所有字符.在27.8.2.3 [stringbuf.members]第1段中,它说:

basic_string<charT,traits,Allocator> str() const;

返回:basic_string对象,其内容等于basic_stringbuf基础字符序列....

该段落继续描述底层字符序列是什么,但它相当于:输入模式中的整个原始字符串和原始字符以及输出模式中的其他写入字符.

  • @chowey:请阅读整个答案,而不仅仅是第一段:读取位置会提前,但`str()`仍会返回整个字符串.关于确定:上面的引用取自C++标准(ISO/IEC 14882-2011).如果实施偏离,则不符合标准. (2认同)