Namespaces
Variants

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

From cppreference.net
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 ) 移动所有 basic_ios 成员(除 rdbuf() 外)从 rhs * this 。该移动构造函数受保护:由可移动输入流类 std::basic_ifstream std::basic_istringstream 的移动构造函数调用,这些类知道如何正确移动关联的流缓冲区。

参数

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

示例

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream s1("hello");
    std::istream s2(s1.rdbuf()); // 正确:s2 与 s1 共享缓冲区
//  std::istream s3(std::istringstream("test")); // 错误:移动构造函数受保护
//  std::istream s4(s2);                         // 错误:拷贝构造函数被删除
    std::istringstream s5(std::istringstream("world")); // 正确:通过派生类调用移动构造函数
    std::cout << s2.rdbuf() << ' ' << s5.rdbuf() << '\n';
}

输出:

hello world