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) 調用該函數,否則用 new char[n],其中 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 << "overflow() 前:放置区的大小为 " << epptr()-pbase() << ",有 " << epptr()-pptr() << " 个可用写入位置\n"; int_type rc = std::strstreambuf::overflow(c); std::cout << "overflow() 后:放置区的大小为 " << epptr()-pbase() << ",有 " << epptr()-pptr() << " 个可用写入位置\n"; return rc; } }; int main() { mybuf sbuf; // 读写动态 strstreambuf