# std::basic_istream<CharT,Traits>::basic_istream

< cpp‎ | io‎ | basic istream

explicit basic_istream( std::basic_streambuf<CharT, Traits>* sb); | (1) |
protected: basic_istream( const basic_istream& rhs ) = delete; | (2) | (C++11 起)
protected: basic_istream( basic_istream&& rhs ); | (3) | (C++11 起)

1) 构造 `basic_istream` 对象，通过调用 basic_ios::init(sb) 赋初始值给基类。初始化 `gcount()` 的值为零。

2) 复制构造函数为受保护，且被删除。输入流不可复制。

3) 移动构造函数从 `rhs` 复制 `gcount()` 的值，设置 rhs 的 gcount() 值为零，并使用 `basic_ios<CharT, Traits>::move(rhs)` 从 `rhs` 移动所有 basic_ios 成员，除了 `rdbuf()` 到 `*this` 中。此移动构造函数受保护：它为可移动输入流类 std::basic_ifstream 和 std::basic_istringstream 的移动构造函数调用，它们知道如何正确地移动关联流缓冲。

### 参数

sb | - | 用作底层设备的流缓冲

### 示例

    #include <sstream>
    #include <iostream>

    int main()
    {
        std::istringstream s1("hello");
        std::istream s2(s1.rdbuf());                        // OK ： s2 与 s1 共享缓冲

    //    std::istream s3(std::istringstream("test"));      // 错误：移动构造函数为受保护
    //    std::istream s4(s2);                              // 错误：复制构造函数被删除
        std::istringstream s5(std::istringstream("world")); // OK ：导出类调用移动构造函数

        std::cout << s2.rdbuf() << ' ' << s5.rdbuf() << '\n';
    }

输出：

    hello world