老汉在最开始学习 C++ 的时候,流这个东东就是我的软肋。原因只有一个,这个东西涉及到的要记住的东西太多了,各种各样的输出输入的版本,实在是繁杂的很。最糟糕的是,各个编译器之间好像在实现上总有不一致的地方,在这个编译器里面能用的类到那个编译器里就会无缘无故地不见了。而且 ISO C++ 的头文件还有带扩展名和不带扩展名两种,咱们是些程序的,做产品的,是拿了别人钱的,不能像毛头小青年学习一样,时兴哪个就用哪个,那样是会死人的。
微软一向以兼容性优秀而著称,结果这次老汉用 VC8 编译 VC6 的一个老工程还是遇到了麻烦。开始是说 fstream.h 这个头文件没了,到网上搜去,有高人说要用不带扩展名的那个版本,还要加上 using namespace std。改完了以后又说,strstrea.h 找不到,再到网上搜,无解。看了半天代码也不知道到底哪块儿代码用到了这个头文件,索性注释掉。这下乐子就大了,出来一大堆什么 nocreate 未定义,网上又说了,这个东西好像在 VC8 里没什么替代品,我老人家只好全部注释掉。接着又说 istrstream 类找不到。看来是注释掉 strstrea.h 的后遗症犯了。看了看文档,说这个类现在在 strstream 里。再加上。还有问题,说是,eatwhite() 方法不是类成员,网上依然无解。想了半天,想起来原来还见过一个名叫 ws() 的东西,和流里面的空白有关,看了一下,幸好可用。把原来的 stm.eatwhite() 全部改成了 ws(stm)。
编译是通过了,运行是不是正常,鬼才知道。直到现在,“流”这个破玩艺儿还在不停地改来改去,而老汉学习它的时候,是在遥远的 1997 年了,十年了,还没有稳定下来,可见是个很难缠的东西,以后还是绕着点走比较好……