basic_stringbuf()
: basic_stringbuf(ios_base::in | ios_base::out) {} // (1) C++11
explicit basic_stringbuf(
ios_base::openmode which); // (2) C++11
explicit basic_stringbuf(
ios_base::openmode which = ios_base::in | ios_base::out); // (1)+(2) C++03
explicit basic_stringbuf(
const basic_string<CharT, Traits, Allocator>& s,
ios_base::openmode which = ios_base::in | ios_base::out); // (3) C++03
explicit basic_stringbuf(
basic_string<CharT, Traits, Allocator>&& s,
ios_base::openmode which = ios_base::in | ios_base::out); // (4) C++20
basic_stringbuf(
ios_base::openmode which,
const Allocator& a); // (5) C++20
explicit basic_stringbuf(const Allocator& a)
: basic_stringbuf(ios_base::in | ios_base::out, a) {} // (6) C++20
explicit basic_stringbuf(
const basic_string<CharT, Traits, Allocator>& s,
const Allocator& a)
: basic_stringbuf(s, ios_base::in | ios_base::out, a) {} // (7) C++20
explicit basic_stringbuf(
const basic_string<CharT, Traits, Allocator>& s,
ios_base::openmode which,
const Allocator& a); // (8) C++20
template<class SAlloc>
explicit basic_stringbuf(
const basic_string<CharT, Traits, SAlloc>& s,
ios_base::openmode which = ios_base::in | ios_base::out); // (9) C++20
template<class SAlloc>
basic_stringbuf(
const basic_string<CharT, Traits, SAlloc>& s,
const Allocator& a)
: basic_stringbuf(s, ios_base::in | ios_base::out, a) {} // (10) C++20
template<class SAlloc>
basic_stringbuf(
const basic_string<CharT, Traits, SAlloc>& s,
ios_base::openmode which,
const Allocator& a); // (11) C++20
basic_stringbuf(basic_stringbuf&& rhs); // (12) C++11
basic_stringbuf(basic_stringbuf&& rhs, const Allocator& a); // (13) C++20
template<class T>
explicit
basic_stringbuf(
const T& t,
ios_base::openmode which = ios_base::in | ios_base::out); // (14) C++26
template<class T>
basic_stringbuf(
const T& t,
const Allocator& a); // (15) C++26
template<class T>
basic_stringbuf(
const T& t,
ios_base::openmode which,
const Allocator& a); // (16) C++26
概要
basic_stringbufオブジェクトを構築する。
- (1) : デフォルトコンストラクタ
- (2) : 指定されたモードで構築する
- (3) : 入力文字列として
std::basic_stringオブジェクトのコピーと、指定されたモードで構築する - (4) : 入力文字列として
std::basic_stringオブジェクトの右辺値参照と、指定されたモードで構築する - (5) : モードとアロケータを指定して構築する
- (6) : アロケータを指定して構築する
- (7) : 入力文字列として
std::basic_stringオブジェクトのコピーと、アロケータを指定して構築する - (8) : 入力文字列として
std::basic_stringオブジェクトのコピー、モード、アロケータを指定して構築する - (9) : 入力文字列として
Allocatorに変換可能なアロケータ型をもつstd::basic_stringオブジェクトのコピーと、指定されたモードで構築する - (10) : 入力文字列として
Allocatorに変換可能なアロケータ型をもつstd::basic_stringオブジェクトのコピーと、アロケータを指定して構築する - (11) : 入力文字列として
Allocatorに変換可能なアロケータ型をもつstd::basic_stringオブジェクトのコピー、モード、アロケータを指定して構築する - (12) : ムーブコンストラクタ
- (13) : ムーブコンストラクタでアロケータを指定して構築する
- (14) : 入力文字列として
basic_string_viewに変換可能な文字列と、モードを設定する - (15) : 入力文字列として
basic_string_viewに変換可能な文字列と、アロケータを設定する - (16) : 入力文字列として
basic_string_viewに変換可能な文字列と、モードとアロケータを設定する
テンプレートパラメータ制約
- (14), (15), (16) :
is_convertible_v<const T&, basic_string_view<CharT, Traits>>がtrueであること
効果
- (1) : 内部の文字列バッファを空にし、モードは
ios_base::in | ios_base::outに設定する - (2) : 内部の文字列バッファを空にし、モードは
whichに設定する - (3) : 内部の文字列バッファを
sのコピー、モードはwhichに設定する - (4) : 内部の文字列バッファを
std::move(s)で、モードはwhichに設定する - (5) : 内部の文字列バッファを空にし、モードは
which、アロケータはaに設定する - (6) : 内部の文字列バッファを空にし、モードは
ios_base::in | ios_base::out、アロケータはaに設定する - (7), (8), (9), (10), (11) : 各引数は内部状態の初期化に使用される
- (12) :
rhsからbasic_stringbufオブジェクトをムーブ構築する - (13) :
rhsからbasic_stringbufオブジェクトをムーブ構築し、アロケータはaを使用する - (14) :
basic_string_view<CharT, Traits>(t)で文字列を初期化し、モードはwhichに設定する - (15) :
basic_string_view<CharT, Traits>(t)で文字列を初期化し、モードはios_base::in | ios_base::out、アロケータはaに設定する - (16) :
basic_string_view<CharT, Traits>(t)で文字列を初期化し、モードはwhich、アロケータはaに設定する
例
基本的な使い方
#include <iostream>
#include <sstream>
int main()
{
// (1) デフォルト構築
std::stringbuf buf1;
buf1.sputc('a');
std::cout << buf1.str() << std::endl;
// (3) 文字列を指定して構築
std::stringbuf buf2("initial", std::ios_base::out | std::ios_base::app);
buf2.sputc('!');
std::cout << buf2.str() << std::endl;
}
出力
a
initial!
string_viewからの構築 (C++26)
#include <print>
#include <sstream>
#include <string_view>
int main()
{
std::string_view sv = "from string literal";
std::stringbuf buf1{sv};
std::println("{}", buf1.str());
std::string_view sv2 = "from string_view";
std::stringbuf buf2{sv2};
std::println("{}", buf2.str());
}
出力
from string literal
from string_view