C++ 我应该包括在哪里<;字符串>;?

C++ 我应该包括在哪里<;字符串>;?,c++,string,header-files,C++,String,Header Files,我仍然习惯于使用C/C++并且我不想“过度包含”库 我有一个标题,我想在其中放置读取输入数据的方法以及我称之为of un.h的变量,因为它处理与我试图优化的目标函数相关的信息。在这个标题中,我需要定义为stringdata\u name 我是否应该将#包含在此头文件中?如果发生这种情况,我将包含在另一个头文件中,比如file\u io.h,然后在我的主例程中调用 #include <string> #include "ofun.h" #include "file_io.h" #包括

我仍然习惯于使用C/C++并且我不想“过度包含”库

我有一个标题,我想在其中放置读取输入数据的方法以及我称之为
of un.h
的变量,因为它处理与我试图优化的目标函数相关的信息。在这个标题中,我需要定义为
stringdata\u name

我是否应该将
#包含在此头文件中?如果发生这种情况,我将
包含在另一个头文件中,比如
file\u io.h
,然后在我的主例程中调用

#include <string>
#include "ofun.h"
#include "file_io.h"
#包括
#包括“of un.h”
#包括“file_io.h”

这会引起问题吗?如果是这样的话,最好的方法/位置是什么,以包括这样的标准库,这样它们就不会发生冲突?

如果标题中的任何内容需要包含在
中的声明,我会继续将其包含在标题文件中。确保头文件不冲突的最佳实践是使用include-guard:。基本上,标题中的声明都包含以下内容:

#ifndef OFUN_H_
#define OFUN_H_

//your header here

#endif

例如,这是您在ofun.h中输入的内容。所有标准库头文件中都已经有include-guard,您只需确保将它们放在您自己的头文件中。

如果您需要以ofun.h格式显示此库,请将其包含在其中。
如果您需要在ofun.h和包含ofun.h的文件中使用它,那么您只能在ofun.h中使用它。

不要害怕。为了一致性起见,将您需要的每个头放在每个使用在该头中声明的标识符的文件中,即使包含链重复了头


卫兵会照顾你的。

如果没有……卫兵会照顾你的。这只是一个问题,如果你正在编写一个非常慢的设备(如软盘)。谢谢,我使用的是包含在<代码> >的uunu> < />代码>但不确定它是在防止“双代码”> < <代码> > <代码> <代码>所有标准C++标题中都有“包含保护”,因此,您甚至可以在同一个文件中连续三次键入
#include
,这样就不会发生任何不好的事情。不过,很明显,这并不能真正完成任何事情,所以请坚持只包含一次。请不要建议使用包含守卫。@MikeSeymour:我没有这么做,是吗?我不知道你的意思。@wolfPack88:像
\u of un\u H\u
这样的名字是保留的,以下划线开头,后跟大写字母。有关详细信息,请参阅。