是否建议使用extern来避免头依赖?

Jor*_*ray 3 c++ coding-style include extern

我在使用extern的翻译单元中删除了两个标题包含.这是可取的吗?

我的具体情况:我有一个叫ParseTree累积的类Token*. ParseTree*是的私人成员Parser.

最初,我有以下几行parse_tree.cc.

#include "parser.h"
#include "token.h"
Run Code Online (Sandbox Code Playgroud)

在分析了我的代码之后,我将实际具有外部依赖关系的两个函数隔离开来,并用以下内容替换了包含:

extern std::ostream& operator<<(std::ostream& out, const Token& t); // @token.h
extern bool hasPriority(const Token* p_tok1, Token* p_tok2); // @parser.h
Run Code Online (Sandbox Code Playgroud)

两种解决方案似乎都有效.选择extern over include时,我应该注意哪些隐藏的危险?

Gre*_*ill 8

如果你使用extern声明,那么通过在你使用它的任何地方重新设置函数的原型,你就会不必要地重复自己.使用头文件,如果要更改原型,只需在一个位置更改它.

所以不,extern当你已经有一个合适的头文件时不要使用.