Java中的泛型与C中的泛型有区别?
一、Java中的泛型与C中的泛型的区别

它们之间有很大的区别。在C ++中,您不必为泛型类型指定类或接口。这就是为什么您可以创建真正的泛型函数和类,而不必担心松散的键入。
| 1 | template |
上面的方法添加了两个相同类型的对象,并且可以用于任何具有” +”运算符的类型T。
在Java中,如果要在传递的对象上调用方法,则必须指定一种类型,例如:
| 1 |
在C ++中,泛型函数/类只能在标头中定义,因为编译器会针对不同的类型(使用其调用)生成不同的函数。因此编译速度较慢。在Java中,编译不会带来很大的损失,但是Java使用一种称为”擦除”的技术,其中泛型在运行时被擦除,因此在运行时Java实际上正在调用…
| 1 | Something sum(Something a, Something b) { return a.add ( b ); } |
因此,Java中的通用编程并不是真正有用,它只是语法上的一点帮助新的foreach构造。
基本上,在C ++中,模板基本上是经过修饰的预处理器/宏集(注意:由于某些人似乎无法理解类推,因此我并不是说模板处理是宏)。在Java中,它们基本上是语法糖,可以最大程度地减少对象的样板转换。这是对C ++模板与Java泛型的相当不错的介绍。
要详细说明这一点:使用C ++模板时,基本上是在创建代码的另一个副本,就像使用#define宏一样。这使您可以执行诸如在模板定义中使用int参数来确定数组大小等操作。
延伸阅读:
二、C++泛型
C++泛型跟虚函数的运行时多态机制不同,泛型支持的静态多态,当类型信息可得的时候,利用编译期多态能够获得最大的效率和灵活性。当具体的类型信息不可得,就必须诉诸运行期多态了,即虚函数支持的动态多态。
对于C++泛型,每个实际类型都已被指明的泛型都会有独立的编码产生,也就是说list和list生成的是不同的代码,编译程序会在此时确保类型安全性。由于知道对象确切的类型,所以编译器进行代码生成的时候就不用运用RTTI,这使得泛型效率跟手动编码一样高。
显然这样的做法增加了代码空间,相比运行时多态,是以空间换时间。
相关推荐HOT
更多>>
什么是数字化和数字化转型?
一、什么是数字化数字化是指在企业的经营管理、产品设计与制造、物料采购与产品销售等各方面全面采用信息技术,实现信息技术与企业业务的融合,...详情>>
2023-10-16 21:25:47
什么是微前端?
一、微前端的概念 微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。微前端的核心目标是将巨石应用...详情>>
2023-10-16 15:49:14
安卓app应用软件开发需要考虑哪些因素?
一、安卓app应用软件开发需要考虑的因素1、设计应用的设计要简洁、易用、易于导航和可操作性强。设计应该与应用的目标和受众群体相匹配。2、功...详情>>
2023-10-16 14:19:05
软件验收测试报告和测试报告区别?
一、软件验收测试报告和测试报告的区别1、作用不同软件验收测试报告:作用是验证软件是否满足客户的需求。测试报告:作用是评估软件的质量并发...详情>>
2023-10-16 13:35:26
京公网安备 11010802030320号