Namespaces
Variants

std::strstreambuf:: strstreambuf

From cppreference.net
(1)
explicit strstreambuf ( std:: streamsize alsize = 0 ) ;
(устарело в C++98)
(до C++11)
strstreambuf ( ) : strstreambuf ( 0 ) { }
explicit strstreambuf ( std:: streamsize alsize ) ;
(начиная с C++11) (удалено в C++26)
strstreambuf ( void * ( * palloc ) ( std:: size_t ) , void ( * pfree ) ( void * ) ) ;
(2) (устарело в C++98)
(удалено в C++26)
strstreambuf ( char * gnext, std:: streamsize n, char * pbeg = 0 ) ;
(3) (устарело в C++98)
(удалено в C++26)
strstreambuf ( signed char * gnext, std:: streamsize n, signed char * pbeg = 0 ) ;
(4) (устарело в C++98)
(удалено в C++26)
strstreambuf ( unsigned char * gnext, std:: streamsize n, unsigned char * pbeg = 0 ) ;
(5) (устарело в C++98)
(удалено в C++26)
strstreambuf ( const char * gnext, std:: streamsize n ) ;
(6) (устарело в C++98)
(удалено в C++26)
strstreambuf ( const signed char * gnext, std:: streamsize n ) ;
(7) (устарело в C++98)
(удалено в C++26)
strstreambuf ( const unsigned char * gnext, std:: streamsize n ) ;
(8) (устарело в C++98)
(удалено в C++26)
1) Создает объект std::strstreambuf : инициализирует базовый класс вызовом конструктора по умолчанию std::streambuf , устанавливает состояние буфера в "динамическое" (буфер будет выделяться по мере необходимости), инициализирует размер выделения предоставленным значением alsize , устанавливает функции выделения и освобождения памяти в нулевые (будет использоваться new [ ] и delete [ ] ).
2) Создает объект std::strstreambuf : инициализирует базовый класс вызовом конструктора по умолчанию std::streambuf , устанавливает состояние буфера в "динамическое" (буфер будет выделяться по мере необходимости), инициализирует размер выделения неопределенным значением, устанавливает функцию выделения памяти в palloc и функцию освобождения памяти в pfree .
3-5) Создает объект std::strstreambuf в следующие этапы:
a) Инициализирует базовый класс, вызывая конструктор по умолчанию std::streambuf .
b) Инициализирует состояние буфера как "постоянное" (буфер является предоставленным пользователем буфером фиксированного размера).
c) Определяет количество элементов в предоставленном пользователем массиве следующим образом: если n больше нуля, используется n . Если n равен нулю, выполняется std:: strlen ( gnext ) для определения размера буфера. Если n отрицательный, используется INT_MAX .
d) Настраивает указатели std::basic_streambuf следующим образом: Если pbeg является нулевым указателем, вызывает setg ( gnext, gnext, gnext + N ) . Если pbeg не является нулевым указателем, выполняет setg ( gnext, gnext, pbeg ) и setp ( pbeg, pbeg + N ) , где N — количество элементов в массиве, определённое ранее.
6-8) То же, что strstreambuf ( ( char * ) gnext, n ) , за исключением того, что в битовой маске состояния буфера установлен бит "constant" (вывод в этот буфер не разрешён).

Содержание

Параметры

alsize - начальный размер динамически выделяемого буфера
palloc - указатель на предоставляемую пользователем функцию выделения памяти
pfree - указатель на предоставляемую пользователем функцию освобождения памяти
gnext - указатель на начало области получения в предоставляемом пользователем массиве
pbeg - указатель на начало области размещения в предоставляемом пользователем массиве
n - количество байтов в области получения (если pbeg равен null) или в области размещения (если pbeg не равен null) предоставляемого пользователем массива

Примечания

Эти конструкторы обычно вызываются конструкторами std:: strstream .

Отчёты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены задним числом к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
P0935R0 C++11 default constructor was explicit made implicit

Пример

#include <iostream>
#include <strstream>
int main()
{
    std::strstreambuf dyn; // динамический
    std::strstream dyn_s; // эквивалентный поток
    dyn_s << 1.23 << std::ends;
    std::cout << dyn_s.str() << '\n';
    dyn_s.freeze(false);
    char buf[10];
    std::strstreambuf user(buf, 10, buf); // пользовательский буфер вывода
    std::ostrstream user_s(buf, 10); // эквивалентный поток
    user_s << 1.23 << std::ends;
    std::cout << buf << '\n';
    std::strstreambuf lit("1 2 3", 5); // константный
    std::istrstream lit_s("1 2 3"); // эквивалентный поток
    int i, j, k;
    lit_s >> i >> j >> k;
    std::cout << i << ' ' << j << ' ' << k << '\n';
}

Вывод:

1.23
1.23
1 2 3

Смотрите также

создаёт объект strstream , опционально выделяя буфер
(публичная функция-член std::strstream )