C++模板实践:使用、调试与优化
1. 模板与内联函数
在C++编程中,将短函数声明为内联函数是提高程序运行时间的常用手段。内联说明符向编译器表明,在调用点直接替换函数体比使用常规函数调用机制更受青睐。不过,编译器并非必须在调用点执行这种内联替换。
函数模板和内联函数都可以在多个翻译单元中定义,通常的做法是将定义放在一个头文件中,然后由多个 .c 文件包含该头文件。这可能会让人误以为函数模板默认就是内联的,但实际上并非如此。如果要将函数模板当作内联函数处理,就应该使用内联说明符(除非函数已经是内联的,例如在类定义内部定义的函数)。所以,许多不属于类定义一部分的短模板函数应该声明为内联函数。
2. 预编译头文件
即便没有模板,C++头文件也可能变得非常大,编译时间会很长。模板的使用更是加剧了这一问题,因此很多编译器厂商引入了预编译头文件的机制。该机制超出了标准范围,依赖于特定厂商的选项。
编译器在翻译文件时,从文件开头开始处理,直至文件末尾。在处理文件中的每个标记(可能来自 #include 的文件)时,编译器会调整其内部状态,比如向符号表中添加条目以便后续查找,同时也可能在目标文件中生成代码。
预编译头文件机制基于这样一个事实:很多文件可以以相同的代码行开头。假设每个要编译的文件都以相同的 N 行代码开头,我们可以编译这 N 行代码,并将编译器在该点的完整状态保存到一个所谓的预编译头文件中。之后,对于程序中的每个文件,我们可以重新加载保存的状态,从第 N + 1 行开始
C++模板调试与优化实践
超级会员免费看
订阅专栏 解锁全文

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



