std::strstreambuf::overflow
来自 cppreference.com
< cpp | io | strstreambuf
protected: virtual int_type overflow( int_type c = EOF ); |
(在 C++98 中已弃用) (在 C++26 中已移除) |
|
将字符 c 追加到缓冲区的输出区域,如果可能,重新分配。
1) 如果 c == EOF,则不执行任何操作。
2) 否则,如果输出区域有可用的写入位置 (pptr() < epptr()),则存储字符,如同通过 *pptr()++ = c 完成的。
3) 否则,如果流缓冲区模式不是动态的或者流缓冲区当前处于冻结状态,则函数将失败并返回 EOF。
4) 否则,函数将重新分配(或最初分配)一个动态数组,该数组足够大以容纳当前动态数组(如果有)的内容加上至少一个额外的写入位置。如果在构造函数中使用了指向分配函数
palloc
的指针,则使用 (*palloc)(n) 调用该函数,其中 n
是要分配的字节数,否则使用 new char[n]。如果在构造函数中使用了指向释放函数 pfree
的指针,则使用 (*pfree)(p) 调用该函数以释放以前的数组(如果需要),否则使用 delete[] p。如果分配失败,则函数将失败并返回 EOF。内容 |
[编辑] 参数
c | - | 要存储在输出区域的字符 |
[编辑] 返回值
如果 c == EOF,则返回除 EOF 之外的某个值。否则,如果成功,则返回 (unsigned char)(c),如果失败,则返回 EOF。
[编辑] 示例
运行此代码
#include <iostream> #include <strstream> struct mybuf : std::strstreambuf { int_type overflow(int_type c) { std::cout << "Before overflow(): size of the put area is " << epptr()-pbase() << " with " << epptr()-pptr() << " write positions available\n"; int_type rc = std::strstreambuf::overflow(c); std::cout << "After overflow(): size of the put area is " << epptr()-pbase() << " with " << epptr()-pptr() << " write positions available\n"; return rc; } }; int main() { mybuf sbuf; // read-write dynamic strstreambuf std::iostream stream(&sbuf); stream << "Sufficiently long string to overflow the initial allocation, at least " << " on some systems."; }
可能的输出
Before overflow(): size of the put area is 16 with 0 write positions available After overflow(): size of the put area is 32 with 15 write positions available Before overflow(): size of the put area is 32 with 0 write positions available After overflow(): size of the put area is 64 with 31 write positions available Before overflow(): size of the put area is 64 with 0 write positions available After overflow(): size of the put area is 128 with 63 write positions available
[编辑] 另请参阅
[virtual] |
将字符从输出区域写入到关联的输出序列 ( std::basic_streambuf<CharT,Traits> 的虚拟保护成员函数) |
[virtual] |
将字符追加到输出序列 ( std::basic_stringbuf<CharT,Traits,Allocator> 的虚拟保护成员函数) |
[virtual] |
将字符从输出区域写入到关联的文件 ( std::basic_filebuf<CharT,Traits> 的虚拟保护成员函数) |
将一个字符写入到输出区域并推进下一个指针 ( std::basic_streambuf<CharT,Traits> 的公有成员函数) | |
插入一个字符 ( std::basic_ostream<CharT,Traits> 的公有成员函数) |