Pot*_*ter 24
他们很难验证.没有使用的模板代码往往很少被编译.因此,必须对测试用例进行良好的覆盖.但是测试是耗时的,然后它可能会变成一开始就不需要强大的代码.
Jer*_*ner 22
嗯,怎么样......
3:编译速度慢
4:它们强制在编译时计算事物而不是运行时间(如果您更喜欢快速执行速度而不是运行时灵活性,这也是一个优势)
5:较旧的C++编译器不处理它们,或者没有正确处理它们
6:当您没有正确获取代码时,它们生成的错误消息几乎是不可理解的
Ale*_*lli 10
唯一真正的缺点是,如果你做任何微小的语法错误在模板中(尤其是使用用其他模板)的错误消息不打算有所帮助......希望几乎无法使用错误的MSG的几页;-).编译器的缺陷是特定于编译器的,而语法虽然丑陋但并不真正"复杂".总而言之 - 尽管有适当的错误诊断存在巨大问题 - 模板仍然是关于C++ 的唯一最好的事情,但有一点可能诱使您使用C++而不是其他语言使用较差的泛型实现,例如Java ...
j_r*_*ker 10
到目前为止,似乎没有人提到我用模板找到的主要缺点:代码可读性急剧下降!
我不是指语法问题 - 是的,语法很难看,但我可以原谅.我的意思是这样的:我发现,以前从未见过的非模板化代码,无论应用程序多么大,如果我从头开始main()我通常可以解码程序正在做的没有问题的广泛笔画.而仅使用vector<int>或类似的代码并不会让我感到烦恼.但是,一旦代码开始为简单的容器类型之外的目的定义和使用自己的模板,可理解性就会迅速消失. 这对代码维护有非常不利的影响.
其中一部分是不可避免的:模板通过复杂的偏序重载决策规则(对于函数模板)提供更大的表现力,并且在较小程度上提供部分特化(对于类模板).但规则是如此复杂,甚至编译器编写者(我很高兴地承认他比我更聪明一个数量级)仍然在角落案件中弄错了.
在C++中命名空间,朋友,继承,重载,自动转换和依赖于参数的查找的交互已经足够复杂.但是当你在混合中添加模板时,以及它们带来的名称查找和自动转换规则的细微变化,复杂性可以达到我认为没有人可以处理的比例.我只是不相信自己阅读和理解使用所有这些结构的代码.
与模板无关的困难是调试器仍然难以自然地显示STL容器的内容(与C样式数组相比).
| 归档时间: |
|
| 查看次数: |
15873 次 |
| 最近记录: |