7、C++模板实践:使用、调试与优化

C++模板调试与优化实践

C++模板实践:使用、调试与优化

1. 模板与内联函数

在C++编程中,将短函数声明为内联函数是提高程序运行时间的常用手段。内联说明符向编译器表明,在调用点直接替换函数体比使用常规函数调用机制更受青睐。不过,编译器并非必须在调用点执行这种内联替换。

函数模板和内联函数都可以在多个翻译单元中定义,通常的做法是将定义放在一个头文件中,然后由多个 .c 文件包含该头文件。这可能会让人误以为函数模板默认就是内联的,但实际上并非如此。如果要将函数模板当作内联函数处理,就应该使用内联说明符(除非函数已经是内联的,例如在类定义内部定义的函数)。所以,许多不属于类定义一部分的短模板函数应该声明为内联函数。

2. 预编译头文件

即便没有模板,C++头文件也可能变得非常大,编译时间会很长。模板的使用更是加剧了这一问题,因此很多编译器厂商引入了预编译头文件的机制。该机制超出了标准范围,依赖于特定厂商的选项。

编译器在翻译文件时,从文件开头开始处理,直至文件末尾。在处理文件中的每个标记(可能来自 #include 的文件)时,编译器会调整其内部状态,比如向符号表中添加条目以便后续查找,同时也可能在目标文件中生成代码。

预编译头文件机制基于这样一个事实:很多文件可以以相同的代码行开头。假设每个要编译的文件都以相同的 N 行代码开头,我们可以编译这 N 行代码,并将编译器在该点的完整状态保存到一个所谓的预编译头文件中。之后,对于程序中的每个文件,我们可以重新加载保存的状态,从第 N + 1 行开始

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值