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

来自cppreference.com
< 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() 的值,设置 rhsgcount() 值为零,并使用 basic_ios<CharT, Traits>::move(rhs)rhs 移动除了 rdbuf() 之外的所有 basic_ios 成员到 *this 中。此移动构造函数受保护:它为可移动输入流类 std::basic_ifstreamstd::basic_istringstream 的移动构造函数所调用,它们知道如何正确地移动关联流缓冲。

参数

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

示例

#include <iostream>
#include <sstream>
 
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