当前位置: 首页 > 面试题库 >

C ++和Java中的“泛型”类型之间有什么区别?

狄海
2023-03-14
问题内容

Java具有泛型,而C ++通过templates提供了非常强大的编程模型。那么,C ++和Java泛型之间有什么区别?


问题答案:

它们之间有很大的区别。在C ++中,您不必为泛型类型指定类或接口。这就是为什么您可以创建真正的泛型函数和类,而不必担心键入错误。

template <typename T> T sum(T a, T b) { return a + b; }

上面的方法添加了两个相同类型的对象,并且可以用于具有“ +”运算符的任何类型T。

在Java中,如果要在传递的对象上调用方法,则必须指定一种类型,例如:

<T extends Something> T sum(T a, T b) { return a.add ( b ); }

在C ++中,泛型函数/类只能在标头中定义,因为编译器会针对不同的类型(与之一起调用)生成不同的函数。因此编译速度较慢。在Java中,编译不会带来很大的损失,但是Java使用一种称为“擦除”的技术,该技术在运行时会擦除泛型类型,因此在运行时Java实际上正在调用…

Something sum(Something a, Something b) { return a.add ( b ); }

因此,Java中的通用编程并不是真正有用的,它只是语法上的一点帮助新的foreach构造。

编辑:以上关于有用性的观点是由一个年轻的自我写成的。Java的泛型当然有助于类型安全



 类似资料:
  • 问题内容: 我主要使用Java,泛型相对较新。我一直在阅读Java做出了错误的决定,或者.NET具有更好的实现等。 那么,C ++,C#,Java在泛型之间的主要区别是什么?每个优点/缺点? 问题答案: 我将把声音添加到噪音中,并努力使事情变得清晰: C#泛型允许你声明这样的内容。 然后编译器将阻止你将不在Person列表中的内容放入列表中。 在后台,C#编译器只是将其放入.NET dll文件中,

  • 你好打字专家们, 有人可以解释为什么下面的代码在第 16 行给我一个错误,而不是在第 13 行给我一个错误。这是预期功能还是缺少功能? 密码 游乐场链接

  • 问题内容: 斯卡拉 在Scala中,哪里可以观察到类和类型之间的差异?为什么这种区别很重要? 在编程Scala时,它只是从语言设计的角度考虑还是具有“实际”影响? 或者是根本,以“固定边界”的类型系统(,来我的心)? 爪哇 在Java中还可以识别出上面提到的许多注意事项/差异/问题? (有关语言的介绍,请参见类型和类之间的区别?。) 问题答案: 当您说“类型”时,我将假设您主要是指静态类型。但是我

  • 问题内容: C ++或Java中的类型转换和类型转换之间有什么区别? 问题答案: 类型 转换 将变量引用的值(内存块)视为与声明该变量的类型不同的类型。 类型 转换 实际上是在对该值进行转换。 在许多语言中, 某些 强制转换(通常是数字强制转换)的确会导致转换(这会因语言而异),但大多数情况下只是“将X当作Y处理”。 像人类语言的大多数方面一样,不幸的是,这些术语在不同社区中的使用略有不同,主要是

  • 这个问题是在泛型关联类型在Rust中可用之前提出的,尽管它们是被提出和开发的。 我的理解是,特征泛型和关联类型在它们可以绑定到结构的类型数量上有所不同。 关联类型仅绑定1个类型: 泛型关联类型是这两种类型的混合。它们绑定到一个类型,正好有一个关联的生成器,而生成器又可以关联任何数量的类型。那么前面示例中的和这个泛型关联类型有什么区别呢?

  • 问题内容: 我正在使用Eclipse来帮助我清理一些代码以正确使用Java泛型。大多数时候,它在推断类型方面做得非常出色,但是在某些情况下,推断类型必须尽可能地通用:对象。但是Eclipse似乎给了我一个选择,可以选择对象类型还是“?”类型。 那么两者之间有什么区别? 和 问题答案: 匹配项的实例,但不是。假设您要编写一个接受Strings到任何内容的映射的方法:如果您要编写 您无法提供。如果你写