std::strstream:: strstream
From cppreference.net
|
strstream
(
)
;
|
(1) |
(устарело в C++98)
(удалено в C++26) |
|
strstream
(
char
*
s,
int
n,
std::
ios_base
::
openmode
mode
=
std:: ios_base :: in | std:: ios_base :: out ) ; |
(2) |
(устарело в C++98)
(удалено в C++26) |
Создает новый входной/выходной strstream и его базовый std::strstreambuf .
1)
Конструирует базовый объект
std::strstreambuf
конструктором по умолчанию, что создаёт динамически расширяемый буфер, и инициализирует базовый класс адресом члена strstreambuf.
2)
Инициализировал базовый класс адресом базового
std::strstreambuf
члена, который инициализируется одним из двух возможных способов, оба из которых используют предоставленный пользователем массив фиксированного размера:
а)
если
(
mode
&
app
)
==
0
(бит
app
не установлен в
mode
), создаёт буфер вызовом
strstreambuf
(
s, n, s
)
. Поведение не определено, если в массиве, первый элемент которого указывается
s
, содержится менее
n
элементов.
б)
если
(
mode
&
app
)
!
=
0
(бит
app
установлен в
mode
), создает буфер путем вызова
strstreambuf
(
s, n, s
+
std::
strlen
(
s
)
)
. Поведение не определено, если в массиве, первый элемент которого указывается
s
, содержится менее
n
элементов, или если массив не содержит корректной нуль-терминированной последовательности символов.
Содержание |
Параметры
| s | - | char массив для использования в качестве выходного буфера | ||||||||||||||||
| n | - | размер массива для использования в выводе | ||||||||||||||||
| mode | - |
определяет режим открытия потока. Это битовая маска, определены следующие константы (хотя используется только
app
):
|
Пример
Запустить этот код
#include <iostream> #include <string> #include <strstream> int main() { // динамический буфер std::strstream s1; s1 << 1 << ' ' << 3.14 << " example" << std::ends; std::cout << "Buffer holds: '" << s1.str() << "'\n"; s1.freeze(false); int n; double d; std::string w; s1 >> n >> d >> w; std::cout << "Read back: n = " << n << ", d = " << d << ", w = '" << w << "'\n"; // статический буфер char arr[20] = "-1 -3.14 "; std::strstream s2(arr, sizeof arr, std::ios_base::app); s2 << "another" << std::ends; std::cout << "Buffer holds: '" << s2.str() << "'\n"; s2 >> n >> d >> w; std::cout << "Read back: n = " << n << ", d = " << d << ", w = '" << w << "'\n"; }
Вывод:
Buffer holds: '1 3.14 example' Read back: n = 1, d = 3.14, w = 'example' Buffer holds: '-1 -3.14 another' Read back: n = -1, d = -3.14, w = 'another'
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение в опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 115 | C++98 |
перегрузка (2) рассматривала только случай
mode & app == 0 (
==
имеет более высокий приоритет чем
&
)
|
рассматривает случаи
(
mode
&
app
)
==
0
и ( mode & app ) ! = 0 |
Смотрите также
создаёт объект
strstreambuf
(публичная функция-член
std::strstreambuf
)
|
|
создаёт объект
istrstream
, опционально выделяя буфер
(публичная функция-член
std::istrstream
)
|
|
создаёт объект
ostrstream
, опционально выделяя буфер
(публичная функция-член
std::ostrstream
)
|