jas*_*son 50
一个巨大的区别是在C++中这是合法的:
<typename T> T sum(T a, T b) { return a + b; }
Run Code Online (Sandbox Code Playgroud)
Java中没有等效的构造.你能说的最好的是
<T extends Something> T Sum(T a, T b) { return a.add(b); }
Run Code Online (Sandbox Code Playgroud)
哪里Something有一个叫做的方法add.
在C++中,发生的是编译器为代码中使用的模板的所有实例创建模板的编译版本.因此,如果我们有
int intResult = sum(5, 4);
double doubleResult = sum(5.0, 4.0);
Run Code Online (Sandbox Code Playgroud)
然后C++编译器将编译sumfor int的版本和sumfor 的版本double.
在Java中,存在擦除的概念.会发生什么是编译器删除对泛型类型参数的所有引用.编译器只创建一个编译版本的代码,无论它与不同类型参数一起使用多少次.
其他差异
| 归档时间: |
|
| 查看次数: |
16430 次 |
| 最近记录: |