嗯,看Bjarne的《The C++ Programming Language》的时候记的。刚刚又看到,整理到BLOG上吧。
对于Iterator实现的缺点,即虚函数的调用造成的开销,解决方法只有抹去虚函数,然而这样又如何做到多态?
对于“侵入式”容器(注:即容器内元素需要继承容器框架提供的特定接口/超类才能放入容器的设计,如Java中只有Object的子类才能进入 Java的容器里……貌似是废话,但对cpp就不是了)。BJ(注:Bjarne,cpp老豆)认为基于Object的容器实现很糟糕。然而对于Java 这种单根继承的OO语言来说,基于Object的容器并不算是“侵入”(语言是“侵入”式的?)。这种容器的缺点就是转型和不能直接放入基本类型的麻烦以 及由此带来的性能开销。在JDK5中,自动装箱和泛型语法已经消除了这些人工上的因素,性能上的缺陷则无法弥补。
关于BJ认为的容器的“胖界面”,其实并不成为问题,如果一切有一个完好的约定的话,意思是说,若某个方法返回一个抽象到Collection的容器,我们会事实上的对这个容器做功能上的最小假设,即关于顺序,操作时间等都不要做过多的要求;而假如返值是 List,则我们就会希望它的有序性,以此类推。这种用接口表达出来的容器实质上也在传递“概念”而非“类”的观念。这和STL的观念是类似的。尽管对于Collection的“肥大界面”,很多方法