C++:原始类型的 iostream operator<< 和 operator>> 是虚拟的吗?

C++: Are iostream operator<< and operator>>s for primitive types virtual?

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

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

快速浏览一下源代码就会发现情况并非如此——这些函数看起来并不是虚拟的。我错过了什么吗?

[上下文是我正在尝试滚动执行二进制 I/O、字节顺序正确等的 istream。]

不,它们不是虚拟的。基本流功能中有一些虚函数,但那是 input/output 实际数据的部分,而不是将类型格式化为字符串的部分,这是 operator>>.[=13= 中实际发生的事情]

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

它们不是虚拟的,但只有 istream/ostream 的重载,所有派生的 classes 都使用。所有stream classes内部都使用了一个buffer,也就是basic_streambuf or derived from itbasic_streambuf 有很多虚函数,所以用 streambuf.

来写你的 stream class 应该不是什么大问题