std::strstreambuf:: strstreambuf
From cppreference.net
<
cpp
|
io
|
strstreambuf
| (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
)
|