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() 的值,设置 rhs 的 gcount() 值为零,并使用 basic_ios<CharT, Traits>::move(rhs)rhs 移动所有 basic_ios 成员,除了 rdbuf()*this 中。此移动构造函数受保护:它为可移动输入流类 std::basic_ifstreamstd::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