简 述: .inl 在 C++ 大型工程项目中的作用?

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


背景

  最近看安全项目代码,发现基础公共库里面使用到了大量的

  1. 内联 __inline
  2. 字符串 typedef 替换
  3. 模板 template < typename TYPE> 等;

在公共 src 文件夹中,仅有 .h.inl 文件,而无一 .cpp 文件?


理解

.inl 文件是什么?

可以理解为 .cpp 文件

  1. 文件后缀名是毫无意义的,最好的例子就是无任何扩展名的 STL 头文件。对编译器也没有特殊含义;
  2. 仅一种约定的规则,表明这里这里面是一些内联函数和模板的实现。
  3. 某种极端特殊情况下,可以解决互相包含和前置声明无法编译通过的场景。

何时使用?

  1. 用于内联函数的定义
  2. 用于功能模板的定义

且通常会在 .h 文件的尾部,使用 #include 包含此文件。