std::basic_streambuf<CharT,Traits>::sputn, std::basic_streambuf<CharT,Traits>::xsputn
来自 cppreference.com
< cpp | io | basic streambuf
std::streamsize sputn( const char_type* s, std::streamsize count ); |
(1) | |
protected: virtual std::streamsize xsputn( const char_type* s, std::streamsize count ); |
(2) | |
1) 调用最派生类的 xsputn(s, count)。
2) 从第一个元素由 s 指向的字符数组中写入 count 个字符到输出序列。这些字符像通过对 sputc() 的重复调用一样写入。写入在写入 count 个字符或对 sputc() 的调用将返回 Traits::eof() 时停止。
如果放置区域已满 (pptr() == epptr()),则 overflow() 是否实际被调用或其效果是通过其他方式实现的,这是未指定的。
内容 |
[编辑] 参数
(无)
[编辑] 返回值
成功写入的字符数。
[编辑] 说明
"通过其他方式实现" 允许在不进行中间缓冲的情况下进行批量 I/O:在某些实现中,std::ofstream::write() 只将指针传递给合适的系统调用。
[编辑] 示例
运行此代码
#include <iostream> #include <sstream> int main() { std::ostringstream s1; std::streamsize sz = s1.rdbuf()->sputn("This is a test", 14); s1 << '\n'; std::cout << "The call to sputn() returned " << sz << '\n' << "The output sequence contains " << s1.str(); std::istringstream s2; sz = s2.rdbuf()->sputn("This is a test", 14); std::cout << "The call to sputn() on an input stream returned " << sz << '\n'; }
输出
The call to sputn() returned 14 The output sequence contains This is a test The call to sputn() on an input stream returned 0
[编辑] 缺陷报告
以下行为更改缺陷报告被追溯地应用到以前发布的 C++ 标准。
DR | 应用于 | 已发布的行为 | 正确的行为 |
---|---|---|---|
LWG 565 | C++98 | xsputn() 始终调用 overflow() 如果 pptr() == epptr() |
它实际上不需要被调用 |
[编辑] 另请参阅
调用 xsgetn() (公有成员函数) |