你能把 #includes 放在C++标题中吗?

Can you put #includes in C++ headers?

本文关键字:标题 C++ 放在 #includes      更新时间:2023-10-16

是否允许在C++标头中添加包含?

#ifndef SOMEH_H
#define SOMEH_H
#include <fstream>
int funcofsomekind(){
    ofstream myfile;
    myfile.open ("Stackoverflow.stack");
    myfile << "wolololol";
    myfile.close();
}
#endif

您当然会在标头中添加#include <something.h>,并且在必要时通常会这样做。

但是,将任何代码放在标头中被认为是非常糟糕的主意(就像您所做的那样(。至少,在不同的源文件中通过标头包含两次函数将导致在链接时重复函数定义。

从字面上看,#include所做的一切(从你的角度来看(就是从指定的文件中获取文本,并将其放在你告诉它的位置。所以是的,你可以把它放在标题中,有时不得不这样做。

你甚至可以做类似
的事情 vector.txt

huge vector .....

std::vector<int> v {
#include vector.txt
}

是的,但是 - 任何包含您的标头的人都会在他的命名空间中获得大量额外的代码。更合适的是将函数放在 cpp 文件中,并且只包含在函数原型所需的标头中 -例如,如果您的标头具有类似

bool is_open(ostream &o);

您必须包括 Fstream。