c++模板对于它的算法编程范型是必不可少的。例如,几乎所有容器的算法都定义为接受容器类型为模板类型并统一对待它们的函数。实际上,这并不完全正确:c++不能在容器上工作,而是在范围上工作,范围由两个迭代器定义,分别指向容器的开始部分和结束部分。因此,整个内容都由迭代器限定:begin <= elements <结束。
区别在于幕后发生了什么。与c#不同,Java不会构建一个特殊的ListOfPerson——它只是使用Java中一直存在的普通的旧ArrayList。当你从数组中取出东西时,通常的Person p = (Person)foo.get(1);强制转换仍然必须完成。编译器为您节省了按键,但仍然会像往常一样引起快速命中/强制转换。
当人们提到“输入擦除”;这就是他们在谈论的。编译器为你插入类型转换,然后“擦除”它应该是Person的列表而不仅仅是Object的事实