public member function
<istream> <iostream>

std::basic_istream::basic_istream

初始化 (1)
explicit basic_istream (basic_streambuf<char_type,traits_type>* sb);
初始化 (1)
explicit basic_istream (basic_streambuf<char_type,traits_type>* sb);
复制 (2)
basic_istream& (const basic_istream&) = delete;
移动 (3)
protected: basic_istream& (basic_istream&& x);
构造对象
构造一个 basic_istream 对象。

(1) 初始化构造函数
通过调用继承的成员 basic_ios::init 并将 sb 作为参数,为其基类的组件分配初始值。
(2) 复制构造函数 (已删除)
已删除:没有复制构造函数。
(3) 移动构造函数 (受保护)
获取 x 的内容,但其关联的流缓冲区除外:它复制 xgcount 值,然后调用 basic_ios::move 来传输 xbasic_ios 组件。xgcount 值为零,未绑定,且其关联的流缓冲区保持不变(调用后 x 的所有其他组件处于未指定但有效状态)。

参数

sb
basic_streambuf 对象的指针,其模板参数与 basic_istream 对象相同。
char_typetraits_type 是成员类型,分别定义为第一个和第二个类模板参数的别名(参见 basic_istream 类型)。
x
另一个同类型的 basic_istream(具有相同的类模板参数 charTtraits)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// istream constructor
#include <iostream>     // std::ios, std::istream, std::cout
#include <fstream>      // std::filebuf

int main () {
  std::filebuf fb;
  if (fb.open ("test.txt",std::ios::in))
  {
    std::istream is(&fb);
    while (is)
      std::cout << char(is.get());
    fb.close();
  }
  return 0;
}

此示例代码使用 basic_filebuf 对象(派生自 basic_streambuf)打开一个名为 test.txt 的文件。该缓冲区作为参数传递给 basic_istream 对象is的构造函数,将其与流关联。然后,程序使用输入流将其内容打印到 cout

basic_istream 类的对象很少直接构造。通常会使用某个派生类(例如标准的 basic_ifstreambasic_istringstream)。

数据竞争

sb 指向的对象可能被访问和/或修改。

异常安全

如果抛出异常,唯一的副作用可能来自对 sb 的访问/修改。

另见