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