【发布时间】:2013-03-14 00:42:05
【问题描述】:
我有两个关于 C++ 模板的问题。假设我已经编写了一个简单的 List,现在我想在我的程序中使用它来存储指向不同对象类型(A*、B* ... ALot*)的指针。我的同事说,对于每种类型,都会生成一段专用的代码,即使所有指针实际上都具有相同的大小。
如果这是真的,有人可以解释一下为什么吗?例如,在 Java 中,泛型与 C++ 中的指针模板具有相同的用途。泛型仅用于预编译类型检查,并在编译前被剥离。当然,所有内容都使用相同的字节码。
第二个问题是,是否还会为 char 和 short 生成专用代码(考虑到它们的大小相同且没有专门化)。
如果这有什么不同,我们正在谈论嵌入式应用程序。
我发现了一个类似的问题,但它并没有完全回答我的问题:Do C++ template classes duplicate code for each pointer type used?
非常感谢!
【问题讨论】:
-
它怎么没有完全回答你的问题?它没有回答什么?
-
char和short不 大小相同,char为 1 个字节,short为 2 个字节。 -
Java 泛型与 C++ 模板几乎没有共同之处。除了
<>语法可能。 -
另外,不要泛化泛型。有多种类型的泛型。 Java 对泛型使用了非常可怕的类型擦除方法。 .NET 语言(C#、VB 等)使用具体化的泛型。精化的泛型在编译之前不会“剥离”。
-
@Mat 我知道,我想在注意到之后编辑评论说“通常”,但现在不可能了。