定义于头文件 <istream>
template< class CharT, |
类模板 basic_istream
提供字符流上的高层输入支持。受支持操作包含带格式的输入(例如整数值或空白符分隔的字符与字符串)和无格式输入(例如未处理字符和字符数组)。此功能以通过 basic_ios
基类访问的底层 basic_streambuf
类所提供的接口实现。大多数库实现中, basic_istream
有一个非继承数据成员:用于存储 basic_istream::gcount() 所返回的值。
成员函数
构造对象
std::basic_istream<CharT,Traits>::basic_istream
explicit basic_istream( std::basic_streambuf<CharT, Traits>* sb); |
(1) | |
protected: |
(2) | (C++11 起) |
protected: |
(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';
}
输出
析构对象
std::basic_istream<CharT,Traits>::~basic_istream
virtual ~basic_istream(); |
析构输入流。
注意
此析构函数不在底层流缓冲( rdbuf()
)上进行任何操作:导出输入流,如 std::basic_ifstream 和 std::basic_istringstream 的析构函数负责调用流缓冲的析构函数。
调用示例
#include <sstream>
#include <iostream>
void print_stringbuf(std::streambuf* p)
{
std::istream buf(p); // buf 与 s1 共享缓冲
int n;
buf >> n;
std::cout << n;
} // 调用 buf 的析构函数。 p 保持不受影响
int main()
{
std::istringstream s1("10 20");
print_stringbuf(s1.rdbuf());
int n;
s1 >> n;
std::cout << ',' << n << '\n';
}
输出
从另一 basic_istream 移动赋值
std::basic_istream<CharT,Traits>::operator=
protected: |
(1) | |
protected: |
(2) | (C++11 起) |
1) 复制赋值运算符受保护且被删除。输入流不可复制赋值 (CopyAssignable) 。文章来源:https://www.toymoban.com/news/detail-541309.html
2) 移动赋值运算符和 rhs
交换 the gcount() 值和所有基类的数据成员,除了 rdbuf()
,如同以调用 swap(*rhs) 。此移动赋值运算符为受保护:它只为导出的可移动输入流类 std::basic_ifstream 和 std::basic_istringstream 的移动赋值运算符调用,它们知道如何正确地移动赋值关联的流缓冲。文章来源地址https://www.toymoban.com/news/detail-541309.html
参数
rhs | - | 要赋值给 *this 的 basic_istream 对象 |
调用示例
#include <sstream>
#include <iostream>
int main()
{
std::istringstream s1;
s1 = std::istringstream("test"); // OK
std::cin = std::istringstream("test"); // 错误: 'operator=' 为受保护
}
到了这里,关于c++11 标准模板(STL)(std::basic_istream)(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!