我在头文件中声明了一些(不是很多)命名空间别名。有些标头在大型代码库中具有相当高的可见性。大部分时间我都停止使用它们,但有些仍然存在。我一路上也删除了一些,但我没有时间在之前/之后。在我去除它们之前,我想知道是否有人测试并计时这个,以及该测试的结果是什么。我不介意它们存在,除非它们可以显着地伤害构建时间。
答案 0 :(得分:2)
命名空间别名的存在不太可能显着影响您的构建时间,但是当然包含多余的头文件。
C ++编译阶段会因为它生成的所有IO而受到很大影响,以获取散布在磁盘周围的多个包含文件的内容,从而消除了这些文件的重要部分,从而缩短了构建时间。
如果你有大量的预处理/元编程代码就会出现问题,在这种情况下,你可能会遇到CPU /内存带宽限制,而补充文件也无关紧要。
提醒一下,减少编译时间的最佳方法是消除依赖关系,以便增量构建更小。
答案 1 :(得分:1)
免责声明:我只能说我对clang编译器的有限经验。
在clang中,命名空间别名定义不会导致源命名空间中的所有符号都被复制到当前声明上下文(即范围)中。相反,编译器会在上下文中发出namespace alias declaration条记录。
换句话说,符号表的大小仅增加1,因此,不命名别名的查找只会受到轻微影响。当然,如果使用别名,则会执行两次查找 - 一次查找别名声明,另一次查找目标命名空间中的查找。