首页  

c++模板和java泛型     所属分类 c 浏览量 844
模板template  泛型generic
参数化类型(parameterized type)或 参量多态(parametric polymorphism)

实现手段 
代码生成 vs 类型擦除

Java泛型  类型擦除  语法糖
java JVM 中没有泛型,泛型会被擦除,使用 Object
如果有限制,例如 T extends Comparable,则使用Comparable


C++ 模板本质上就是一套宏指令集
编译器会针对每种类型创建一份模板代码的副本  模板代码膨胀
MyClass<Foo>不会与MyClass<Bar>共享静态变量
两个MyClass<Foo>实例则会共享静态变量

Java中 MyClass类的静态变量会由所有MyClass实例共享

java中没有 template 关键字

C++模板可以使用int等基本数据类型,Java必须使用引用类型
Java中可将模板的类型参数限定为某种特定类型

C++中,类型参数可以实例化,Java不可以实例化

Java中,类型参数(MyClass<Foo>中的Foo)不能用于静态方法和变量
因为他们会被MyClass<Foo>和MyClass<Bar>共享
但在C++中,这些类是不同的,类型参数可以用于静态方法和静态变量


Java中,不管类型参数是什么,MyClass的所有实例都是同一类型 ,类型参数会在运行时被抹去
C++中,参数类型不同,实例类型也不同



上一篇     下一篇
现代C++特性

C++防止头文件被重复引入的3种方法

c++11 STL 例子

c++11 线程实例

NULL 与 nullptr

c++ 变量名 冲突