std::basic_istream<CharT,Traits>:: 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
)
移动所有 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