public member function
<sstream>

std::basic_stringstream::basic_stringstream

默认 (1)
explicit basic_stringstream (    ios_base::openmode which = ios_base::in | ios_base::out);
initialization (2)
explicit basic_stringstream (    const basic_string<char_type,traits_type,allocator_type>& str,    ios_base::openmode which = ios_base::in | ios_base::out);
默认 (1)
explicit basic_stringstream (    ios_base::openmode which = ios_base::in | ios_base::out);
initialization (2)
explicit basic_stringstream (    const basic_string<char_type,traits_type,allocator_type>& str,    ios_base::openmode which = ios_base::in | ios_base::out);
copy (3)
basic_stringstream (const basic_stringstream&) = delete;
move (4)
basic_stringstream (basic_stringstream&& x);
构造对象
构造一个 basic_stringstream 对象

(1) 空构造函数 (默认构造函数)
构造一个 basic_stringstream 对象,其内容为空序列。
内部,将其 basic_iostream 基类构造函数传递一个指向使用 which 作为参数构造的 basic_stringbuf 对象的指针。
(2) 初始化构造函数
构造一个 basic_stringstream 对象,其内容为 str 的副本。
内部,将其 basic_iostream 基类构造函数传递一个指向使用 strwhich 作为参数构造的 basic_stringbuf 对象的指针。
(3) 复制构造函数 (已删除)
已删除 (无复制构造函数)。
(4) 移动构造函数
获取 x 的内容。
首先,该函数通过 x 移动构造其基类 basic_iostream 类以及 x 的内部 basic_streambuf 对象,然后通过调用成员函数 set_rdbuf 将它们关联起来。
x 处于未指定但有效的状态。
在调用之前,内部 basic_stringbuf 对象控制的序列是否是 x 中的序列,还是其副本,这取决于库的实现。无论如何,调用后两个对象都拥有使用独立序列的内部*字符串缓冲区*。
内部 basic_stringbuf 对象具有至少与 basic_stringstream 对象相同的生命周期。

参数

str
一个具有相同模板参数(charTtraitsAlloc)的basic_string对象,其内容被复制。
x
一个 basic_stringstream 对象,其类型相同(具有相同的类模板参数 charTtraitsAlloc),其值被移动。
which
打开模式:由内部 basic_stringbuf 对象对其内部字符序列提供的访问权限。它是成员类型 openmode 的一个对象,其中以下成员值的任何组合都具有意义:
成员常量代表access
ios_base::in输入序列支持输入操作。
ios_base::out输出序列支持输出操作。
也可以指定 ios_base::openmode 类型的其他值,但它们对 basic_stringstream 对象是否有影响取决于库的实现。
成员常量代表access
ios_base::in输入序列支持输入操作。
ios_base::out输出序列支持输出操作。
ios_base::ate在末尾构造后,以及在每次使用成员函数 str 重置内容后,写入位置都在末尾。
也可以指定 ios_base::openmode 类型的其他值(例如 ios_base::app),但它们对 basic_stringstream 对象是否有影响取决于库的实现。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// swapping ostringstream objects
#include <string>       // std::string
#include <iostream>     // std::cout
#include <sstream>      // std::stringstream

int main () {

  std::stringstream ss;

  ss << 100 << ' ' << 200;

  int foo,bar;
  ss >> foo >> bar;

  std::cout << "foo: " << foo << '\n';
  std::cout << "bar: " << bar << '\n';

  return 0;
}

输出
foo: 100
bar: 200


数据竞争

移动构造函数 (4) 会修改 x

异常安全

强保证: 如果抛出异常,则没有副作用。

另见