std::basic_stringbuf::overflow
性病:基本[医]字符串::溢出
protected: virtual int_type overflow ( int_type c = Traits::eof() | | |
---|
附加字符c
输出字符序列。
如果c
是文件末尾的指示器。traits::eq_int_type(c,traits::eof()) == true
,那么就没有字符可以附加了。函数不执行任何操作,并返回一个未指定的值。traits::eof()
...
否则,如果输出序列具有可用的写入位置,或者此函数可以成功地使写入位置可用,则调用sputc(c)
和回报c
...
如果字符串为输出%28打开,则此函数可以使写入位置可用。mode & ios_base::out) != 0
%29:在这种情况下,它重新分配%28或最初分配%29缓冲区足够大,足以容纳整个当前缓冲区加上至少多一个字符。如果字符串f也打开以输入%28(mode & ios_base::in) != 0
,然后overflow
还通过移动来增加GET区域的大小。egptr()
在新的书写位置上指点。
参数
%280%29
返回值
Traits::eof()
为了表示失败,c
如果字符c
已成功追加,或其他值Traits::eof()
如果被调用Traits::eof()
作为争论。
注记
此函数与典型的overflow()
将缓冲区的内容移动到关联的字符序列,因为对于std::basic_stringbuf
,缓冲器和相关序列是一个和相同的。
例
在用于执行此示例的实现中,溢出%28%29会将PUT区域过度分配到512字节:对str%28%29的调用只会返回四个初始化字节,但是对spac%28%29的下一个508调用将不需要对溢出%28%29进行新的调用。
二次
#include <sstream>
#include <iostream>
struct mybuf : std::stringbuf
{
mybuf(const std::string& new_str,
std::ios_base::openmode which = std::ios_base::in|std::ios_base::out)
: std::stringbuf(new_str, which) {}
int_type overflow(int_type c = EOF) override
{
std::cout << "stringbuf::overflow('" << char(c) << "') called\n"
<< "Before: size of get area: " << egptr() - eback() << '\n'
<< " size of put area: " << epptr() - pbase() << '\n';
int_type ret = std::stringbuf::overflow(c
std::cout << "After : size of get area: " << egptr() - eback() << '\n'
<< " size of put area: " << epptr() - pbase() << '\n';
return ret;
}
};
int main()
{
std::cout << "read-write stream:\n";
mybuf sbuf(" " // read-write stream
std::iostream stream(&sbuf
stream << 1234;
std::cout << sbuf.str() << '\n';
std::cout << "\nread-only stream:\n";
mybuf ro_buf(" ", std::ios_base::in // read-only stream
std::iostream ro_stream(&ro_buf
ro_stream << 1234;
std::cout << "\nwrite-only stream:\n";
mybuf wr_buf(" ", std::ios_base::out // write-only stream
std::iostream wr_stream(&wr_buf
wr_stream << 1234;
}
二次
可能的产出:
二次
read-write stream:
stringbuf::overflow('4') called
Before: size of get area: 3
size of put area: 3
After : size of get area: 4
size of put area: 512
1234
read-only stream:
stringbuf::overflow('1') called
Before: size of get area: 3
size of put area: 0
After : size of get area: 3
size of put area: 0
write-only stream:
stringbuf::overflow('4') called
Before: size of get area: 0
size of put area: 3
After : size of get area: 0
size of put area: 512
二次
另见
overflow virtual | writes characters to the associated output sequence from the put area (virtual protected member function of std::basic_streambuf) |
---|---|
underflow virtual | returns the next character available in the input sequence (virtual protected member function) |
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。