一、template
未使用的template member function不应该被实例化。
对于template的错误检查,只有在实例化操作时才会进行类型类型检查,而所有的语汇(lexing)错误和解析(parsing)错误都会在处理template声明的过程中被表示出来。也就是用到了语法分析器。
在目前的编译器中,面对一个template声明,在它被一组实际参数实例化之前,只能施以有限的错误检查。
template中的名称决议法,分为 scope of the template definition 和 scope of the template instantiation.
template之中,对于一个nonmember的决议结果,是根据这个name的使用是否与“用以实例化该template的参数类型”有关而决定。如果互不相关,则使用“scope of the template declaration”来决定name,否则以“scope of the template instantiation”来决定name。
函数的决议结果,只和函数的原型有关,和函数的返回值没有关系。
对于member function的实例化行为,编译器设计者需要考虑以下3种问题:
- 编译器如何找打函数的定义? --> 答案是产生template program text file, 有点类似header
- 编译器如何能够只实例化程序中用到的member function? --> 解法方法之一,是忽略此项要求,只要class的object被实例化,就全部产生出来;另一个解决方法是模拟链接操作,检测看看哪个函数真正需要,然后只为他们产生实例
- 编译器如何组织member definition在多个 .o文件中被实例化? -->方法是产生多个实例,但只在链接器中保存一个。
本文深入探讨了C++编程中的模板、异常处理、动态铸型和类型ID等核心概念。通过详细解释这些技术的工作原理,帮助开发者理解和应用这些高级特性。
1594

被折叠的 条评论
为什么被折叠?



