Namespaces
Variants

std::basic_stringbuf<CharT,Traits,Allocator>:: basic_stringbuf

From cppreference.net
(Примечание: В данном фрагменте HTML отсутствует текстовое содержимое для перевода - присутствуют только HTML-теги и атрибуты, которые согласно инструкциям не подлежат переводу)
(1)
(до C++11)
explicit basic_stringbuf ( std:: ios_base :: openmode which ) ;
(начиная с C++11)
basic_stringbuf ( )
: basic_stringbuf ( std:: ios_base :: in | std:: ios_base :: out ) { }
(2) (начиная с C++11)
explicit

basic_stringbuf ( const std:: basic_string < CharT, Traits, Allocator > & s,
std:: ios_base :: openmode which =

std:: ios_base :: in | std:: ios_base :: out ) ;
(3)
explicit basic_stringbuf ( std:: basic_string < CharT, Traits, Allocator > && s,

std:: ios_base :: openmode which =

std:: ios_base :: in | std:: ios_base :: out ) ;
(4) (начиная с C++20)
basic_stringbuf ( std:: ios_base :: openmode which, const Allocator & a ) ;
(5) (начиная с C++20)
explicit basic_stringbuf ( const Allocator & a )
: basic_stringbuf ( std:: ios_base :: in | std:: ios_base :: out , a ) { }
(6) (начиная с C++20)
template < class SAlloc >

explicit basic_stringbuf ( const std:: basic_string < CharT, Traits, SAlloc > & s,
std:: ios_base :: openmode which =

std:: ios_base :: in | std:: ios_base :: out ) ;
(7) (начиная с C++20)
template < class SAlloc >

basic_stringbuf ( const std:: basic_string < CharT, Traits, SAlloc > & s,

std:: ios_base :: openmode which, const Allocator & a ) ;
(8) (начиная с C++20)
template < class SAlloc >

basic_stringbuf ( const std:: basic_string < CharT, Traits, SAlloc > & s,
const Allocator & a )

: basic_stringbuf ( s, std:: ios_base :: in | std:: ios_base :: out , a ) { }
(9) (начиная с C++20)
template < class StringViewLike >

explicit basic_stringbuf ( const StringViewLike & t,
std:: ios_base :: openmode which =

std:: ios_base :: in | std:: ios_base :: out ) ;
(10) (начиная с C++26)
template < class StringViewLike >

basic_stringbuf ( const StringViewLike & t,

std:: ios_base :: openmode which, const Allocator & a ) ;
(11) (начиная с C++26)
template < class StringViewLike >
basic_stringbuf ( const StringViewLike & t, const Allocator & a ) ;
(12) (начиная с C++26)
basic_stringbuf ( basic_stringbuf && rhs ) ;
(13) (начиная с C++11)
basic_stringbuf ( basic_stringbuf && rhs, const Allocator & a ) ;
(14) (начиная с C++20)
basic_stringbuf ( const basic_stringbuf & rhs ) = delete ;
(15) (начиная с C++11)

Базовый класс std::basic_streambuf и демонстрационные члены данных buf и mode инициализируются следующим образом.

После инициализации этих подобъектов, перегрузки (3-12) инициализируют входные и выходные последовательности, как если бы вызывался init_buf_ptrs () .

Перегрузка std::basic_streambuf база buf mode
(1) инициализированный по умолчанию определяется реализацией
(см. ниже)
which
(2) std:: ios_base :: in |
std:: ios_base :: out
(3) s which
(4) std :: move ( s )
(5) a
(6) std:: ios_base :: in |
std:: ios_base :: out
(7) s which
(8) { s, a }
(9) std:: ios_base :: in |
std:: ios_base :: out
(10) { sv, Allocator ( ) } which
(11) { sv, a }
(12) std:: ios_base :: in |
std:: ios_base :: out
(13) rhs
(копирующий конструктор)
std :: move ( rhs ) . str ( ) rhs. mode
(14) { std :: move ( rhs ) . str ( ) , a }
1,2) Перегрузка (1) (until C++11) (2) (since C++11) является конструктором по умолчанию. Зависит от реализации, инициализируются ли указатели последовательности ( eback() , gptr() , egptr() , pbase() , pptr() , epptr() ) нулевыми указателями.
5,6) Когда построение завершено, str. empty ( ) является true .
7) Эта перегрузка участвует в разрешении перегрузки только если std:: is_same_v < SAlloc, Allocator > равно false .
10-12) Неявно преобразует t в string view sv как если бы было выполнено std:: basic_string_view < CharT, Traits > sv = t ; , затем используется как указано выше в таблице.
Эти перегрузки участвуют в разрешении перегрузки только если std:: is_convertible_v < const StringViewLike & ,
std:: basic_string_view < CharT, Traits >>
является true .
13,14) Перегрузка (13) является конструктором перемещения. Зависит от реализации, получают ли шесть указателей на последовательности в * this значения, которые имел rhs .
When the construction is complete, rhs is empty but usable, and
  • Пусть rhs_p ссылается на состояние rhs непосредственно перед этим конструированием, следующие выражения будут иметь значение true :
  • str ( ) == rhs_p. str ( )
  • getloc ( ) == rhs_p. getloc ( )
  • gptr ( ) - eback ( ) == rhs_p. gptr ( ) - rhs_p. eback ( )
  • egptr ( ) - eback ( ) == rhs_p. egptr ( ) - rhs_p. eback ( )
  • pptr ( ) - pbase ( ) == rhs_p. pptr ( ) - rhs_p. pbase ( )
  • epptr ( ) - pbase ( ) == rhs_p. epptr ( ) - rhs_p. pbase ( )
**Примечание:** Весь код внутри тегов ` ` сохранен без изменений, так как содержит C++ специфичные термины и код, которые не должны переводиться согласно инструкциям. HTML структура и атрибуты также полностью сохранены.
  • Пусть rhs_a обозначает состояние rhs непосредственно после этой конструкции, тогда следующие выражения будут иметь значение true :
  • ! eback ( ) || eback ( ) ! = rhs_a. eback ( )
  • ! gptr ( ) || gptr ( ) ! = rhs_a. gptr ( )
  • ! egptr ( ) || egptr ( ) ! = rhs_a. egptr ( )
  • ! pbase ( ) || pbase ( ) ! = rhs_a. pbase ( )
  • ! pptr ( ) || pptr ( ) ! = rhs_a. pptr ( )
  • ! epptr ( ) || epptr ( ) ! = rhs_a. epptr ( )
**Примечание:** Весь представленный код является C++ кодом внутри тегов ` `, поэтому в соответствии с инструкциями он не был переведен. HTML структура и атрибуты также сохранены без изменений.
15) Конструктор копирования удален; std::basic_stringbuf не является CopyConstructible .

Содержание

Параметры

s - a std::basic_string used to initialize the buffer
t - an object (convertible to std::basic_string_view ) used to initialize the buffer
a - another allocator used to construct the internal std::basic_string
rhs - another basic_stringbuf
which - specifies stream open mode. It is bitmask type, the following constants are defined:
Constant Explanation
app seek to the end of stream before each write
binary open in binary mode
in open for reading
out open for writing
trunc discard the contents of the stream when opening
ate seek to the end of stream immediately after open
noreplace (C++23) open in exclusive mode

Примечания

Обычно вызывается конструктором std::basic_stringstream .

Уровень поддержки режимов открытия, отличных от std::ios_base::in и std::ios_base::out , варьируется в разных реализациях. C++11 явно определяет поддержку std::ios_base::ate в str() и в этом конструкторе, однако std::ios_base::app , std::ios_base::trunc и std::ios_base::binary оказывают различное влияние в разных реализациях.

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_sstream_from_string_view 202306L (C++26) Взаимодействие строковых потоков с std::string_view

Пример

Демонстрирует прямой вызов конструктора std::basic_stringbuf :

#include <iostream>
#include <sstream>
int main()
{
    // конструктор по умолчанию (режим = in | out)
    std::stringbuf buf1;
    buf1.sputc('1');
    std::cout << &buf1 << '\n';
    // строковый конструктор в режиме at-end (C++11)
    std::stringbuf buf2("test", std::ios_base::in
                              | std::ios_base::out
                              | std::ios_base::ate);
    buf2.sputc('1');
    std::cout << &buf2 << '\n';
    // тест режима append (результаты различаются между компиляторами)
    std::stringbuf buf3("test", std::ios_base::in
                              | std::ios_base::out
                              | std::ios_base::app);
    buf3.sputc('1');
    buf3.pubseekpos(1);
    buf3.sputc('2');
    std::cout << &buf3 << '\n';
}

Вывод:

1
test1
est12 (Sun Studio) 2st1 (GCC)

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

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

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 432 C++98 1. перегрузка (1) не выделяла объект массива
2. перегрузка (3) не определяла, как инициализируются
входная и выходная последовательности
1. ограничение удалено
2. определено
LWG 562 C++98 перегрузка (3) устанавливала epptr() на позицию после последнего базового
символа, если bool ( which & std:: ios_base :: out ) == true
epptr() может быть установлен
за пределами этой позиции
P0935R0 C++11 конструктор по умолчанию был explicit сделан implicit

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

конструирует строковый поток
(публичная функция-член std::basic_stringstream<CharT,Traits,Allocator> )