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时,我应该注意哪些隐藏的危险?
如果你使用extern声明,那么通过在你使用它的任何地方重新设置函数的原型,你就会不必要地重复自己.使用头文件,如果要更改原型,只需在一个位置更改它.
所以不,extern当你已经有一个合适的头文件时不要使用.