最終更新日時(UTC):
が更新

履歴 編集

function
<sstream>

std::basic_stringbuf::コンストラクタ

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

参照