C ++:是iostream运算符<<和运算符>> s用于原始类型虚拟?

时间:2015-12-28 10:57:57

标签: c++ io virtual iostream operator-keyword

由于ifstreamistringstream是从istream继承的,我预计istream(或更确切地说,basic_istream)会声明operator>>像这样的原始类型:

virtual istream& istream::operator>>(char &c); virtual istream& istream::operator>>(int &i);

快速浏览消息来源表明情况并非如此 - 这些功能看起来并不虚拟。我错过了什么吗?

[上下文是我试图滚动istreams执行二进制I / O,纠正字节顺序等。]

2 个答案:

答案 0 :(得分:2)

不,他们不是虚拟的。基本流功能中有一些虚函数,但是输入/输出实际数据的部分内部,而不是类型到字符串的格式,这是operator>>中实际发生的事情。

编辑:我相信所有虚拟功能都是"隐藏"来自公共接口。 basic_streambuf::pubseekpos至少在gcc提供的标头中作为对虚拟seekpos的调用。

答案 1 :(得分:2)

它们不是虚拟的,但只有istream/ostream的重载,所有派生类都使用这些重载。所有stream类都使用内部缓冲区,即basic_streambuf or derived from itbasic_streambuf有许多虚函数,因此根据stream编写streambuf类应该不是一个大问题。