CppCoreGuidelines SF.2 头文件里不能包含对象定义或非 inline 的函数定义
06 November 2023
“A header file must not contain object definitions or non-inline function definitions”
理由
包含一些只能定义一次的东西会导致链接错误。
例子
// file.h: namespace Foo { int x = 7; int xx() { return x+x; } } // file1.cpp: #include <file.h> // ... more ... // file2.cpp: #include <file.h> // ... more ...
链接 file1.cpp 与 file2.cpp 会导致两个链接错误。
其他指南:
头文件只能包含以下内容:
#include
其他文件(需要包含 include 保护)- 模板
- 类定义
- 函数声明
extern
声明inline
函数定义constexpr
定义const
定义using
别名定义
强化
- 检查上述清单是否满足。