0

如果我们必须选择使用 C++ 模板或 Java 泛型来实现解决方案并忽略剩余的语言问题(如执行时间),如果生成的代码的大小很重要,那么它们中的哪一个是首选

我读到在 Java 泛型中,类型参数是在编译后抛出的,而不是存储在元数据中,这是否会导致程序更小?

4

1 回答 1

5

首先,您需要了解这些东西并不相似。它们实际上几乎是截然相反的:

  • C++ 模板通过在编译时和链接时生成代码来生成新类型。
  • Java 泛型在编译时通过类型代数限制现有类型。

从这两个事实来看,一切都随之而来。Java 泛型在空间或时间上增加了零成本;C++ 模板增加了这两种成本。熟练的内联和使用非模板基类(旧void *技巧)可以最大限度地减少 C++ 空间成本,甚至可能消除它,但它需要非常小心,并预测 C++ 编译器实际上是如何进行内联的。

于 2013-05-24T08:57:27.207 回答