@@ -52,24 +52,64 @@ basic_ostringstream(
5252 const Allocator& a); // (9) C++20
5353
5454basic_ostringstream(basic_ostringstream&& rhs); // (10) C++11
55+
56+ template<class T >
57+ explicit basic_ostringstream(
58+ const T& t,
59+ ios_base::openmode which = ios_base::out); // (11) C++26
60+
61+ template<class T >
62+ basic_ostringstream(
63+ const T& t,
64+ const Allocator& a); // (12) C++26
65+
66+ template<class T >
67+ basic_ostringstream(
68+ const T& t,
69+ ios_base::openmode which,
70+ const Allocator& a); // (13) C++26
5571```
5672* ios_base[link /reference/ios/ios_base.md]
5773* basic_string[link /reference/string/basic_string.md]
5874
5975## 概要
6076`basic_ostringstream`オブジェクトを構築する。
6177
78+ ここで、初期値として設定する文字列は、既存のファイルを上書きモードで開くことに似ており、ストリームの初期位置が先頭のまま、ストリーム内容の文字列を設定するものである。モードとして[`std::ios_base::ate`](/reference/ios/ios_base/type-openmode.md)を指定しすると、ストリームの初期位置が末尾に設定される。
79+
80+ - (1) : デフォルトコンストラクタ
81+ - (2) : 指定されたモードで構築する
82+ - (3) : 初期文字列として[`std::basic_string`](/reference/string/basic_string.md)オブジェクトのコピーを指定して構築する
83+ - (4) : 指定されたモードとアロケータで構築する
84+ - (5) : 初期文字列として[`std::basic_string`](/reference/string/basic_string.md)オブジェクトのコピーと、アロケータを指定して構築する
85+ - (6) : 初期文字列として[`std::basic_string`](/reference/string/basic_string.md)オブジェクトのコピー、モード、アロケータを指定して構築する
86+ - (7) : 初期文字列として`Allocator`に変換可能なアロケータをもつ[`std::basic_string`](/reference/string/basic_string.md)オブジェクトのコピーと、モードを指定して構築する
87+ - (8) : 初期文字列として`Allocator`に変換可能なアロケータをもつ[`std::basic_string`](/reference/string/basic_string.md)オブジェクトのコピーと、アロケータを指定して構築する
88+ - (9) : 初期文字列として`Allocator`に変換可能なアロケータをもつ[`std::basic_string`](/reference/string/basic_string.md)オブジェクトのコピー、モード、アロケータを指定して構築する
89+ - (10) : ムーブコンストラクタ
90+ - (11) : 初期文字列として[`std::basic_string_view`](/reference/string_view/basic_string_view.md)に変換可能な文字列と、モードを指定して構築する
91+ - (12) : 初期文字列として[`std::basic_string_view`](/reference/string_view/basic_string_view.md)に変換可能な文字列と、アロケータを指定して構築する
92+ - (13) : 初期文字列として[`std::basic_string_view`](/reference/string_view/basic_string_view.md)に変換可能な文字列、モード、アロケータを指定して構築する
93+
94+
95+ ## テンプレートパラメータ制約
96+ - (11), (12), (13) : `is_convertible_v<const T&, basic_string_view<CharT, Traits>>`が`true`であること
97+
6298## 効果
6399- (1) : 内部の`basic_stringbuf`オブジェクトを`basic_stringbuf<CharT, Traits, Allocator>(ios_base::out)`で構築する
64100- (2) : 内部の`basic_stringbuf`オブジェクトを`basic_stringbuf<CharT, Traits, Allocator>(which | ios_base::out)`で構築する
65101- (3) : 内部の`basic_stringbuf`オブジェクトを`basic_stringbuf<CharT, Traits, Allocator>(s, which | ios_base::out)`で構築する
66102- (4) : 内部の`basic_stringbuf`オブジェクトを`basic_stringbuf<CharT, Traits, Allocator>(std::move(s), which | ios_base::out)`で構築する
67103- (5) : 内部の`basic_stringbuf`オブジェクトを`basic_stringbuf<CharT, Traits, Allocator>(which | ios_base::out, a)`で構築する
68- - (6), (7), (8), (9), (10) : 各引数が対応する`basic_stringbuf`のコンストラクタに渡される
69- - (11) : `rhs`から`basic_ostringstream`オブジェクトをムーブ構築する
104+ - (6), (7), (8), (9) : 各引数が対応する`basic_stringbuf`のコンストラクタに渡される
105+ - (10) : `rhs`から`basic_ostringstream`オブジェクトをムーブ構築する
106+ - (11) : `basic_string_view<CharT, Traits>(t)`で文字列を初期化し、モードは`which | ios_base::out`に設定する
107+ - (12) : `basic_string_view<CharT, Traits>(t)`で文字列を初期化し、モードは`ios_base::out`、アロケータは`a`に設定する
108+ - (13) : `basic_string_view<CharT, Traits>(t)`で文字列を初期化し、モードは`which | ios_base::out`、アロケータは`a`に設定する
70109
71110
72111## 例
112+ ### 基本的な使い方
73113```cpp example
74114#include <iostream>
75115#include <sstream>
@@ -82,18 +122,47 @@ int main()
82122 std::cout << ss1.str() << std::endl;
83123
84124 // (3) 文字列を指定して構築
85- std::ostringstream ss2("initial ");
125+ std::ostringstream ss2("xxxx yyyy ");
86126 ss2 << "text";
87127 std::cout << ss2.str() << std::endl;
88128}
89129```
90130* str()[ link str.md]
91131
92- ### 出力
132+ #### 出力
93133```
94134default
95- initial text
135+ text yyyy
136+ ```
137+
138+ ### string_viewからの構築 (C++26)
139+ ``` cpp example
140+ #include < iostream>
141+ #include < sstream>
142+ #include < string_view>
143+
144+ int main ()
145+ {
146+ // 文字列リテラルから構築
147+ std::ostringstream ss1{"Hello?", std::ios_base::ate};
148+ ss1 << "World";
149+ std::cout << ss1.str() << std::endl;
150+
151+ // string_viewから構築
152+ std::string_view sv = "Hello?";
153+ std::ostringstream ss2{sv};
154+ ss2 << "World";
155+ std::cout << ss2.str() << std::endl;
156+ }
157+ ```
158+
159+ #### 出力
160+ ```
161+ Hello?World
162+ World?
96163```
97164
98165## 参照
99- - [ P0408R7 Efficient Access to ` basic_stringbuf ` 's Buffer] ( https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0408r7.pdf )
166+ - [ P0408R7 Efficient Access to ` basic_stringbuf ` 's Buffer] ( https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0408r7.pdf )
167+ - [ P2495R3 Interfacing stringstreams with ` string_view ` ] ( https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2495r3.pdf )
168+ - C++26で[ ` std::string_view ` ] ( /reference/string_view/basic_string_view.md ) に対応した
0 commit comments