C 和 Java 中的“通用”类型有什么区别?

新手上路,请多包涵

Java 具有泛型,而 C++ 提供了非常强大的编程模型 template s。那么,C++ 和 Java 泛型有什么区别呢?

原文由 popopome 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 412
2 个回答

他们之间有很大的不同。在 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 的泛型有助于类型安全。

原文由 Alexandru Nedelcu 发布,翻译遵循 CC BY-SA 4.0 许可协议

我想在这里引用 askanydifference

C++ 和 Java 之间的主要区别在于它们对平台的依赖性。而 C++ 是平台相关语言,Java 是平台无关语言。

上述陈述是 C++ 能够提供真正的泛型类型的原因。虽然 Java 确实有严格的检查,因此它们不允许像 C++ 允许的那样使用泛型。

原文由 Piyush-Ask Any Difference 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题