c++的模板,其实应该说是inline,是可以作出无开销函数的。
不过就是编译器做了一个inline expansion这样的常见的优化而已。
java的jvm理论上也是可以做到的,这也是为什么stack trace不能完全依赖的原因,因为一旦jvm选择inline了,就没有那个stack frame了。
c++在inline这点上,比java低级一些(低级不是不好,就象不能说asm就不如c++一样),inline本来是编译器优化的概念,它却暴露给了程序员,c++的哲学是相信程序员,而不是相信编译器。
关于boolean vs int。其实,java的不灵活更多来自缺乏指针运算。仅仅是局部变量,把boolean当int或者把int当boolean没有一点正经的意义。或者说,如果你觉得这个限制影响了你程序的灵活性,那是假象,只能证明你的c++水平还不到。
只有面对一个buffer的时候,把int和boolean统一使用才有效率上的意义。但即使如此,允许int和boolean不经cast就直接混用也是原始的。你完全可以(boolean)i,或者(int)b, reinterpret_cast<bool*>(pi),reinterpret_cast<int*>(pb)等等。也不损害灵活性啊。
这点上,c做得就好得多。