Namespaces
Variants

std::strstreambuf:: overflow

From ru.cppreference.net
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> )