最近恰好看到qq群里有讨论cout的问题,发现自己对于cout的运行机制也不怎么明白,所以就仔细研究了下这个东西。
如下是c++ reference中cout的定义
extern ostream cout;
先说下问题吧,如图所示这两行代码在vs中是无法编译的,因为ostream没有对于stringstream类型的<<操作符重载
我在ostream中加入了以下代码:
如下图所示,这时候错误就消失了,当然还是没法编译成功,毕竟改了原生的c++头文件,没改库文件。
typedef basic_stringstream<char, char_traits<char>, allocator<char> > stringstream;
其实我一直在奇怪stringstream继承自ostream,按理来说ostream内部不用专门去重写针对stringstream的<<操作符,大概是因为basic_stringstream是模板的原因,这个我还需要深究以下。